@facet-coverage/core 0.2.0 ā 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/README.md +57 -5
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +2 -35
- package/dist/cli/commands/analyze.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +5 -2
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +291 -10
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +2 -34
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +2 -34
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/index.js +6 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/config.d.ts +15 -0
- package/dist/cli/utils/config.d.ts.map +1 -0
- package/dist/cli/utils/config.js +88 -0
- package/dist/cli/utils/config.js.map +1 -0
- package/dist/core/FacetParser.d.ts +18 -1
- package/dist/core/FacetParser.d.ts.map +1 -1
- package/dist/core/FacetParser.js +45 -3
- package/dist/core/FacetParser.js.map +1 -1
- package/dist/core/IDChangeDetector.d.ts +50 -0
- package/dist/core/IDChangeDetector.d.ts.map +1 -0
- package/dist/core/IDChangeDetector.js +147 -0
- package/dist/core/IDChangeDetector.js.map +1 -0
- package/dist/core/TestScanner.d.ts +8 -0
- package/dist/core/TestScanner.d.ts.map +1 -1
- package/dist/core/TestScanner.js +47 -6
- package/dist/core/TestScanner.js.map +1 -1
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -384,14 +384,24 @@ test('comprehensive test', {
|
|
|
384
384
|
|
|
385
385
|
## Configuration
|
|
386
386
|
|
|
387
|
-
|
|
387
|
+
Facet Coverage supports multiple configuration file formats. The CLI looks for config files in this order:
|
|
388
|
+
|
|
389
|
+
1. `facet.config.js` (ESM or CommonJS)
|
|
390
|
+
2. `facet.config.mjs` (ESM only)
|
|
391
|
+
3. `facet.config.json` (JSON)
|
|
392
|
+
|
|
393
|
+
### Configuration Formats
|
|
394
|
+
|
|
395
|
+
**JavaScript (ESM):**
|
|
388
396
|
|
|
389
397
|
```javascript
|
|
398
|
+
// facet.config.js
|
|
390
399
|
export default {
|
|
391
|
-
//
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
400
|
+
// Glob pattern(s) for finding facet markdown files
|
|
401
|
+
facetPattern: ['features/**/*.facet.md', 'features/**/facets/*.md'],
|
|
402
|
+
|
|
403
|
+
// Where structure files are generated
|
|
404
|
+
structureFiles: ['features/**/.facet/structure.json'],
|
|
395
405
|
|
|
396
406
|
// Where tests live
|
|
397
407
|
testDir: './features/**/tests',
|
|
@@ -422,6 +432,48 @@ export default {
|
|
|
422
432
|
};
|
|
423
433
|
```
|
|
424
434
|
|
|
435
|
+
**JSON:**
|
|
436
|
+
|
|
437
|
+
```json
|
|
438
|
+
{
|
|
439
|
+
"facetPattern": ["features/**/*.facet.md", "features/**/facets/*.md"],
|
|
440
|
+
"structureFiles": ["features/**/.facet/structure.json"],
|
|
441
|
+
"testDir": "./features/**/tests",
|
|
442
|
+
"testPatterns": ["**/*.spec.ts", "**/*.test.ts"],
|
|
443
|
+
"validation": {
|
|
444
|
+
"requireSourceExists": true,
|
|
445
|
+
"requireSectionExists": true,
|
|
446
|
+
"requireAllTestsLinked": false
|
|
447
|
+
},
|
|
448
|
+
"output": {
|
|
449
|
+
"dir": ".facet-coverage",
|
|
450
|
+
"formats": ["json", "html", "markdown"]
|
|
451
|
+
},
|
|
452
|
+
"thresholds": {
|
|
453
|
+
"global": 75,
|
|
454
|
+
"byType": {
|
|
455
|
+
"compliance": 100
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### Configuration Options
|
|
462
|
+
|
|
463
|
+
| Option | Type | Default | Description |
|
|
464
|
+
|--------|------|---------|-------------|
|
|
465
|
+
| `facetPattern` | `string \| string[]` | `['features/**/*.facet.md', 'features/**/facets/*.md']` | Glob pattern(s) for finding facet files |
|
|
466
|
+
| `structureFiles` | `string[]` | `['features/**/.facet/structure.json']` | Glob patterns for structure files |
|
|
467
|
+
| `testDir` | `string` | `'./features/**/tests'` | Test directory pattern |
|
|
468
|
+
| `testPatterns` | `string[]` | `['**/*.spec.ts', '**/*.test.ts']` | Test file patterns |
|
|
469
|
+
| `validation.requireSourceExists` | `boolean` | `true` | Check if source files exist |
|
|
470
|
+
| `validation.requireSectionExists` | `boolean` | `true` | Check if sections exist in files |
|
|
471
|
+
| `validation.requireAllTestsLinked` | `boolean` | `false` | Require every test links to a facet |
|
|
472
|
+
| `output.dir` | `string` | `'.facet-coverage'` | Output directory for reports |
|
|
473
|
+
| `output.formats` | `string[]` | `['json', 'html', 'markdown']` | Report formats to generate |
|
|
474
|
+
| `thresholds.global` | `number` | `75` | Overall coverage threshold % |
|
|
475
|
+
| `thresholds.byType` | `object` | `{}` | Per-type coverage thresholds |
|
|
476
|
+
|
|
425
477
|
---
|
|
426
478
|
|
|
427
479
|
## ID Patterns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAOA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEhF"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.analyzeCommand = analyzeCommand;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const path_1 = require("path");
|
|
6
4
|
const CoverageCalculator_js_1 = require("../../core/CoverageCalculator.js");
|
|
7
5
|
const JsonReporter_js_1 = require("../../reporters/JsonReporter.js");
|
|
8
6
|
const HtmlReporter_js_1 = require("../../reporters/HtmlReporter.js");
|
|
9
7
|
const MarkdownReporter_js_1 = require("../../reporters/MarkdownReporter.js");
|
|
10
|
-
const
|
|
8
|
+
const config_js_1 = require("../utils/config.js");
|
|
11
9
|
/**
|
|
12
10
|
* Analyze facet coverage
|
|
13
11
|
*/
|
|
14
12
|
async function analyzeCommand(options = {}) {
|
|
15
13
|
const cwd = process.cwd();
|
|
16
14
|
// Load config
|
|
17
|
-
const config = await loadConfig(options.config, cwd);
|
|
15
|
+
const config = await (0, config_js_1.loadConfig)(options.config, cwd);
|
|
18
16
|
// Override with CLI options
|
|
19
17
|
if (options.threshold) {
|
|
20
18
|
config.thresholds.global = parseInt(options.threshold, 10);
|
|
@@ -72,37 +70,6 @@ async function analyzeCommand(options = {}) {
|
|
|
72
70
|
process.exit(1);
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Load configuration from file or use defaults
|
|
77
|
-
*/
|
|
78
|
-
async function loadConfig(configPath, cwd) {
|
|
79
|
-
const configFiles = [
|
|
80
|
-
configPath,
|
|
81
|
-
'facet.config.js',
|
|
82
|
-
'facet.config.mjs',
|
|
83
|
-
'facet.config.json',
|
|
84
|
-
].filter(Boolean);
|
|
85
|
-
for (const file of configFiles) {
|
|
86
|
-
const fullPath = (0, path_1.resolve)(cwd, file);
|
|
87
|
-
if ((0, fs_1.existsSync)(fullPath)) {
|
|
88
|
-
if (file.endsWith('.json')) {
|
|
89
|
-
const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
|
|
90
|
-
return { ...types_js_1.defaultConfig, ...JSON.parse(content) };
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// Dynamic import for JS config
|
|
94
|
-
try {
|
|
95
|
-
const imported = await import(fullPath);
|
|
96
|
-
return { ...types_js_1.defaultConfig, ...(imported.default || imported) };
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
console.warn(`Warning: Could not load config from ${file}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return types_js_1.defaultConfig;
|
|
105
|
-
}
|
|
106
73
|
/**
|
|
107
74
|
* Print coverage report to console
|
|
108
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,13 @@ interface GenerateOptions {
|
|
|
2
2
|
output?: string;
|
|
3
3
|
type?: string;
|
|
4
4
|
noTypes?: boolean;
|
|
5
|
+
config?: string;
|
|
6
|
+
global?: boolean;
|
|
7
|
+
quiet?: boolean;
|
|
5
8
|
}
|
|
6
9
|
/**
|
|
7
|
-
* Generate structure.json from facet markdown files
|
|
10
|
+
* Generate structure.json and TypeScript types from facet markdown files
|
|
8
11
|
*/
|
|
9
|
-
export declare function generateCommand(dir
|
|
12
|
+
export declare function generateCommand(dir?: string, options?: GenerateOptions): Promise<void>;
|
|
10
13
|
export {};
|
|
11
14
|
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AASA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqfD;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -3,15 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateCommand = generateCommand;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
|
+
const glob_1 = require("glob");
|
|
6
7
|
const FacetParser_js_1 = require("../../core/FacetParser.js");
|
|
8
|
+
const IDChangeDetector_js_1 = require("../../core/IDChangeDetector.js");
|
|
9
|
+
const TestScanner_js_1 = require("../../core/TestScanner.js");
|
|
10
|
+
const config_js_1 = require("../utils/config.js");
|
|
7
11
|
/**
|
|
8
12
|
* Convert a facet ID to a valid TypeScript identifier
|
|
9
13
|
* e.g., "business:guest-purchase-flow" -> "BUSINESS_GUEST_PURCHASE_FLOW"
|
|
14
|
+
* e.g., "checkout/payments/pci:card-storage" -> "CHECKOUT_PAYMENTS_PCI_CARD_STORAGE"
|
|
10
15
|
*/
|
|
11
16
|
function toConstantName(facetId) {
|
|
12
17
|
return facetId
|
|
13
18
|
.toUpperCase()
|
|
14
|
-
.replace(/[
|
|
19
|
+
.replace(/[/:-]/g, '_')
|
|
15
20
|
.replace(/[^A-Z0-9_]/g, '');
|
|
16
21
|
}
|
|
17
22
|
/**
|
|
@@ -79,9 +84,217 @@ ${facetIds.map(id => ` '${id}',`).join('\n')}
|
|
|
79
84
|
`;
|
|
80
85
|
}
|
|
81
86
|
/**
|
|
82
|
-
* Generate
|
|
87
|
+
* Generate global types file that combines all features
|
|
83
88
|
*/
|
|
84
|
-
|
|
89
|
+
function generateGlobalTypesFile(allFacets, featureImports) {
|
|
90
|
+
const facetIds = allFacets.map(f => f.id);
|
|
91
|
+
// Generate the union type
|
|
92
|
+
const unionType = facetIds.length > 0
|
|
93
|
+
? facetIds.map(id => ` | '${id}'`).join('\n')
|
|
94
|
+
: " | never";
|
|
95
|
+
// Generate constants for each facet ID
|
|
96
|
+
const constants = allFacets.map(f => {
|
|
97
|
+
const constName = toConstantName(f.id);
|
|
98
|
+
const comment = f.title ? ` /** ${f.title} */` : '';
|
|
99
|
+
return `${comment}\n ${constName}: '${f.id}' as const,`;
|
|
100
|
+
}).join('\n');
|
|
101
|
+
// Generate re-exports for each feature
|
|
102
|
+
const reExports = Array.from(featureImports.entries())
|
|
103
|
+
.map(([feature, path]) => `export * as ${feature} from '${path}';`)
|
|
104
|
+
.join('\n');
|
|
105
|
+
return `/**
|
|
106
|
+
* Auto-generated Global Facet types
|
|
107
|
+
* Combines all features for single import point
|
|
108
|
+
*
|
|
109
|
+
* Generated by: bunx facet generate --global
|
|
110
|
+
* DO NOT EDIT THIS FILE MANUALLY
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
// Re-export all feature-specific types
|
|
114
|
+
${reExports}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* All valid facet IDs across ALL features
|
|
118
|
+
*/
|
|
119
|
+
export type FacetId =
|
|
120
|
+
${unionType};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Combined Facet ID constants from all features
|
|
124
|
+
*/
|
|
125
|
+
export const Facets = {
|
|
126
|
+
${constants}
|
|
127
|
+
} as const;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Type-safe facet annotation helper (global version)
|
|
131
|
+
*/
|
|
132
|
+
export function facet<T extends FacetId>(...facetIds: T[]): { facets: T[]; toString: () => string } {
|
|
133
|
+
return {
|
|
134
|
+
facets: facetIds,
|
|
135
|
+
toString: () => facetIds.join(', '),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* All facet IDs across all features
|
|
141
|
+
*/
|
|
142
|
+
export const allFacetIds: FacetId[] = [
|
|
143
|
+
${facetIds.map(id => ` '${id}',`).join('\n')}
|
|
144
|
+
];
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get facet type from file path.
|
|
149
|
+
* Handles both .facet.md and .md extensions.
|
|
150
|
+
*/
|
|
151
|
+
function getFacetType(filePath, options) {
|
|
152
|
+
if (options.type) {
|
|
153
|
+
return options.type;
|
|
154
|
+
}
|
|
155
|
+
return FacetParser_js_1.FacetParser.getFilePrefix(filePath);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Find facet files in a directory (both conventions)
|
|
159
|
+
*/
|
|
160
|
+
function findFacetFilesInDir(dir) {
|
|
161
|
+
const files = [];
|
|
162
|
+
// Find *.facet.md files in the directory
|
|
163
|
+
const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
|
|
164
|
+
for (const entry of entries) {
|
|
165
|
+
if (entry.isFile()) {
|
|
166
|
+
if (entry.name.endsWith('.facet.md') || entry.name.endsWith('.md')) {
|
|
167
|
+
files.push((0, path_1.join)(dir, entry.name));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return files;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Recursively discover all facet files matching patterns
|
|
175
|
+
*/
|
|
176
|
+
async function discoverFacetFiles(rootDir, patterns) {
|
|
177
|
+
const allFiles = [];
|
|
178
|
+
for (const pattern of patterns) {
|
|
179
|
+
const matches = await (0, glob_1.glob)(pattern, { cwd: rootDir, absolute: true });
|
|
180
|
+
allFiles.push(...matches);
|
|
181
|
+
}
|
|
182
|
+
// Remove duplicates
|
|
183
|
+
return [...new Set(allFiles)];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Group facet files by their feature directory
|
|
187
|
+
*/
|
|
188
|
+
function groupByFeature(files, rootDir) {
|
|
189
|
+
const groups = new Map();
|
|
190
|
+
for (const file of files) {
|
|
191
|
+
// Determine feature directory
|
|
192
|
+
let featureDir;
|
|
193
|
+
const fileDir = (0, path_1.dirname)(file);
|
|
194
|
+
if ((0, path_1.basename)(fileDir) === 'facets') {
|
|
195
|
+
// Legacy: features/checkout/facets/business.md -> features/checkout
|
|
196
|
+
featureDir = (0, path_1.dirname)(fileDir);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// New: features/checkout/business.facet.md -> features/checkout
|
|
200
|
+
featureDir = fileDir;
|
|
201
|
+
}
|
|
202
|
+
const existing = groups.get(featureDir) || [];
|
|
203
|
+
existing.push(file);
|
|
204
|
+
groups.set(featureDir, existing);
|
|
205
|
+
}
|
|
206
|
+
return groups;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Process a single feature directory and generate outputs
|
|
210
|
+
*/
|
|
211
|
+
async function processFeature(featureDir, files, rootDir, options, config) {
|
|
212
|
+
const parser = new FacetParser_js_1.FacetParser();
|
|
213
|
+
const facets = [];
|
|
214
|
+
const featureName = (0, path_1.basename)(featureDir);
|
|
215
|
+
console.log(`\n Feature: ${featureName}`);
|
|
216
|
+
for (const filePath of files) {
|
|
217
|
+
const parsed = parser.parseFile(filePath);
|
|
218
|
+
const type = getFacetType(filePath, options);
|
|
219
|
+
const fileName = (0, path_1.basename)(filePath);
|
|
220
|
+
console.log(` š ${fileName}`);
|
|
221
|
+
for (const section of parsed.sections) {
|
|
222
|
+
// Only include top-level sections (h2 or the first h1 if no h2s)
|
|
223
|
+
if (section.level <= 2) {
|
|
224
|
+
// Use hierarchical ID if nested, simple ID otherwise
|
|
225
|
+
const relPath = (0, path_1.relative)(rootDir, featureDir);
|
|
226
|
+
const isNested = relPath.includes('/') || relPath !== (0, path_1.basename)(featureDir);
|
|
227
|
+
const facetId = isNested
|
|
228
|
+
? FacetParser_js_1.FacetParser.generateHierarchicalFacetId(rootDir, filePath, section.slug)
|
|
229
|
+
: FacetParser_js_1.FacetParser.generateFacetId(filePath, section.slug);
|
|
230
|
+
// Determine relative source path
|
|
231
|
+
const sourcePath = FacetParser_js_1.FacetParser.isFacetMdFile(filePath)
|
|
232
|
+
? fileName
|
|
233
|
+
: `facets/${fileName}`;
|
|
234
|
+
facets.push({
|
|
235
|
+
id: facetId,
|
|
236
|
+
source: {
|
|
237
|
+
file: sourcePath,
|
|
238
|
+
section: section.slug,
|
|
239
|
+
},
|
|
240
|
+
type,
|
|
241
|
+
title: section.title,
|
|
242
|
+
});
|
|
243
|
+
console.log(` ā ${facetId}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Determine output directory
|
|
248
|
+
const outputDir = options.output || (0, path_1.join)(featureDir, '.facet');
|
|
249
|
+
// Build structure object
|
|
250
|
+
const structure = {
|
|
251
|
+
feature: featureName,
|
|
252
|
+
facets,
|
|
253
|
+
};
|
|
254
|
+
// Ensure output directory exists
|
|
255
|
+
(0, fs_1.mkdirSync)(outputDir, { recursive: true });
|
|
256
|
+
// Write structure file
|
|
257
|
+
const structurePath = (0, path_1.join)(outputDir, 'structure.json');
|
|
258
|
+
// Detect ID changes before writing
|
|
259
|
+
if (!options.quiet) {
|
|
260
|
+
const changeReport = IDChangeDetector_js_1.IDChangeDetector.detectChanges(structurePath, facets);
|
|
261
|
+
if (changeReport.hasChanges) {
|
|
262
|
+
console.log('\n ā ļø Facet ID Changes Detected:');
|
|
263
|
+
const reportLines = IDChangeDetector_js_1.IDChangeDetector.formatReport(changeReport);
|
|
264
|
+
for (const line of reportLines) {
|
|
265
|
+
console.log(line);
|
|
266
|
+
}
|
|
267
|
+
// Show affected tests if we have config
|
|
268
|
+
if (config && (changeReport.renamed.length > 0 || changeReport.removed.length > 0)) {
|
|
269
|
+
const scanner = new TestScanner_js_1.TestScanner(config);
|
|
270
|
+
const affected = await IDChangeDetector_js_1.IDChangeDetector.findAffectedTests(changeReport, scanner, rootDir);
|
|
271
|
+
if (affected.size > 0) {
|
|
272
|
+
console.log('\n Tests that may need updates:');
|
|
273
|
+
for (const [oldId, tests] of affected) {
|
|
274
|
+
console.log(`\n For "${oldId}":`);
|
|
275
|
+
for (const test of tests) {
|
|
276
|
+
console.log(` - ${test.file}:${test.line} "${test.title}"`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
console.log('');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
(0, fs_1.writeFileSync)(structurePath, JSON.stringify(structure, null, 2));
|
|
285
|
+
// Generate TypeScript types file (unless disabled)
|
|
286
|
+
if (!options.noTypes) {
|
|
287
|
+
const typesContent = generateTypesFile(facets, featureName);
|
|
288
|
+
const typesPath = (0, path_1.join)(outputDir, 'facets.ts');
|
|
289
|
+
(0, fs_1.writeFileSync)(typesPath, typesContent);
|
|
290
|
+
}
|
|
291
|
+
console.log(` ā
Generated: ${(0, path_1.relative)(process.cwd(), outputDir)}`);
|
|
292
|
+
return { facets, outputDir };
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Generate from explicit directory (backwards compatible)
|
|
296
|
+
*/
|
|
297
|
+
async function generateFromDirectory(dir, options) {
|
|
85
298
|
const facetsDir = (0, path_1.resolve)(process.cwd(), dir);
|
|
86
299
|
if (!(0, fs_1.existsSync)(facetsDir)) {
|
|
87
300
|
console.error(`ā Directory not found: ${facetsDir}`);
|
|
@@ -89,27 +302,29 @@ async function generateCommand(dir, options = {}) {
|
|
|
89
302
|
}
|
|
90
303
|
console.log(`š Generating structure from: ${facetsDir}`);
|
|
91
304
|
// Find all markdown files in the directory
|
|
92
|
-
const files = (
|
|
305
|
+
const files = findFacetFilesInDir(facetsDir);
|
|
93
306
|
if (files.length === 0) {
|
|
94
307
|
console.error(`ā No markdown files found in: ${facetsDir}`);
|
|
95
308
|
process.exit(1);
|
|
96
309
|
}
|
|
97
310
|
const parser = new FacetParser_js_1.FacetParser();
|
|
98
311
|
const facets = [];
|
|
99
|
-
for (const
|
|
100
|
-
const filePath = (0, path_1.join)(facetsDir, file);
|
|
312
|
+
for (const filePath of files) {
|
|
101
313
|
const parsed = parser.parseFile(filePath);
|
|
102
|
-
|
|
103
|
-
const type =
|
|
314
|
+
const file = (0, path_1.basename)(filePath);
|
|
315
|
+
const type = getFacetType(filePath, options);
|
|
104
316
|
console.log(` š ${file}`);
|
|
105
317
|
for (const section of parsed.sections) {
|
|
106
|
-
// Only include top-level sections (h2 or the first h1 if no h2s)
|
|
107
318
|
if (section.level <= 2) {
|
|
108
319
|
const facetId = FacetParser_js_1.FacetParser.generateFacetId(file, section.slug);
|
|
320
|
+
// Determine source path based on file type
|
|
321
|
+
const sourcePath = FacetParser_js_1.FacetParser.isFacetMdFile(filePath)
|
|
322
|
+
? file
|
|
323
|
+
: `facets/${file}`;
|
|
109
324
|
facets.push({
|
|
110
325
|
id: facetId,
|
|
111
326
|
source: {
|
|
112
|
-
file:
|
|
327
|
+
file: sourcePath,
|
|
113
328
|
section: section.slug,
|
|
114
329
|
},
|
|
115
330
|
type,
|
|
@@ -145,4 +360,70 @@ async function generateCommand(dir, options = {}) {
|
|
|
145
360
|
console.log(` Types: ${typesPath}`);
|
|
146
361
|
}
|
|
147
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Generate from config patterns
|
|
365
|
+
*/
|
|
366
|
+
async function generateFromConfig(config, options) {
|
|
367
|
+
const cwd = process.cwd();
|
|
368
|
+
// Get facet patterns from config
|
|
369
|
+
const patterns = Array.isArray(config.facetPattern)
|
|
370
|
+
? config.facetPattern
|
|
371
|
+
: config.facetPattern
|
|
372
|
+
? [config.facetPattern]
|
|
373
|
+
: ['features/**/*.facet.md', 'features/**/facets/*.md'];
|
|
374
|
+
console.log('š Discovering facet files...\n');
|
|
375
|
+
// Find all matching files
|
|
376
|
+
const files = await discoverFacetFiles(cwd, patterns);
|
|
377
|
+
if (files.length === 0) {
|
|
378
|
+
console.error('ā No facet files found matching patterns:');
|
|
379
|
+
for (const pattern of patterns) {
|
|
380
|
+
console.error(` - ${pattern}`);
|
|
381
|
+
}
|
|
382
|
+
console.error('\nMake sure facet files exist or specify a directory explicitly:');
|
|
383
|
+
console.error(' bunx facet generate features/checkout/facets/');
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
console.log(`Found ${files.length} facet file(s)`);
|
|
387
|
+
// Group files by feature
|
|
388
|
+
const featureGroups = groupByFeature(files, cwd);
|
|
389
|
+
const allFacets = [];
|
|
390
|
+
const featureOutputs = new Map();
|
|
391
|
+
// Process each feature
|
|
392
|
+
for (const [featureDir, featureFiles] of featureGroups) {
|
|
393
|
+
const { facets, outputDir } = await processFeature(featureDir, featureFiles, cwd, options, config);
|
|
394
|
+
allFacets.push(...facets);
|
|
395
|
+
// Store for global types
|
|
396
|
+
const featureName = (0, path_1.basename)(featureDir);
|
|
397
|
+
const relativeOutput = (0, path_1.relative)((0, path_1.join)(cwd, '.facet'), (0, path_1.join)(outputDir, 'facets'));
|
|
398
|
+
featureOutputs.set(featureName, relativeOutput);
|
|
399
|
+
}
|
|
400
|
+
// Generate global types if requested
|
|
401
|
+
if (options.global && !options.noTypes) {
|
|
402
|
+
const globalOutputDir = (0, path_1.join)(cwd, '.facet');
|
|
403
|
+
(0, fs_1.mkdirSync)(globalOutputDir, { recursive: true });
|
|
404
|
+
const globalTypesContent = generateGlobalTypesFile(allFacets, featureOutputs);
|
|
405
|
+
const globalTypesPath = (0, path_1.join)(globalOutputDir, 'facets.ts');
|
|
406
|
+
(0, fs_1.writeFileSync)(globalTypesPath, globalTypesContent);
|
|
407
|
+
console.log(`\nā
Generated global types: ${(0, path_1.relative)(cwd, globalTypesPath)}`);
|
|
408
|
+
}
|
|
409
|
+
// Summary
|
|
410
|
+
console.log(`\nš Summary:`);
|
|
411
|
+
console.log(` Features: ${featureGroups.size}`);
|
|
412
|
+
console.log(` Total Facets: ${allFacets.length}`);
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Generate structure.json and TypeScript types from facet markdown files
|
|
416
|
+
*/
|
|
417
|
+
async function generateCommand(dir, options = {}) {
|
|
418
|
+
const cwd = process.cwd();
|
|
419
|
+
if (dir) {
|
|
420
|
+
// Backwards compatible: explicit directory provided
|
|
421
|
+
await generateFromDirectory(dir, options);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// New behavior: use config to find facet files
|
|
425
|
+
const config = await (0, config_js_1.loadConfig)(options.config, cwd);
|
|
426
|
+
await generateFromConfig(config, options);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
148
429
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAIA,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlF"}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateCommand = validateCommand;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const path_1 = require("path");
|
|
6
4
|
const Validator_js_1 = require("../../core/Validator.js");
|
|
7
|
-
const
|
|
5
|
+
const config_js_1 = require("../utils/config.js");
|
|
8
6
|
/**
|
|
9
7
|
* Validate facet structure and test links
|
|
10
8
|
*/
|
|
11
9
|
async function validateCommand(options = {}) {
|
|
12
10
|
const cwd = process.cwd();
|
|
13
11
|
// Load config
|
|
14
|
-
const config = await loadConfig(options.config, cwd);
|
|
12
|
+
const config = await (0, config_js_1.loadConfig)(options.config, cwd);
|
|
15
13
|
// Enable strict mode if requested
|
|
16
14
|
if (options.strict) {
|
|
17
15
|
config.validation.requireAllTestsLinked = true;
|
|
@@ -30,36 +28,6 @@ async function validateCommand(options = {}) {
|
|
|
30
28
|
process.exit(1);
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Load configuration from file or use defaults
|
|
35
|
-
*/
|
|
36
|
-
async function loadConfig(configPath, cwd) {
|
|
37
|
-
const configFiles = [
|
|
38
|
-
configPath,
|
|
39
|
-
'facet.config.js',
|
|
40
|
-
'facet.config.mjs',
|
|
41
|
-
'facet.config.json',
|
|
42
|
-
].filter(Boolean);
|
|
43
|
-
for (const file of configFiles) {
|
|
44
|
-
const fullPath = (0, path_1.resolve)(cwd, file);
|
|
45
|
-
if ((0, fs_1.existsSync)(fullPath)) {
|
|
46
|
-
if (file.endsWith('.json')) {
|
|
47
|
-
const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
|
|
48
|
-
return { ...types_js_1.defaultConfig, ...JSON.parse(content) };
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
try {
|
|
52
|
-
const imported = await import(fullPath);
|
|
53
|
-
return { ...types_js_1.defaultConfig, ...(imported.default || imported) };
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
console.warn(`Warning: Could not load config from ${file}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return types_js_1.defaultConfig;
|
|
62
|
-
}
|
|
63
31
|
/**
|
|
64
32
|
* Print validation results
|
|
65
33
|
*/
|