@facet-coverage/core 0.1.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 +296 -48
- 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 +6 -2
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +371 -9
- 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 +9 -5
- 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 +10 -1
- package/dist/core/TestScanner.d.ts.map +1 -1
- package/dist/core/TestScanner.js +124 -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
|
@@ -3,11 +3,298 @@ 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
|
|
13
|
+
* e.g., "business:guest-purchase-flow" -> "BUSINESS_GUEST_PURCHASE_FLOW"
|
|
14
|
+
* e.g., "checkout/payments/pci:card-storage" -> "CHECKOUT_PAYMENTS_PCI_CARD_STORAGE"
|
|
9
15
|
*/
|
|
10
|
-
|
|
16
|
+
function toConstantName(facetId) {
|
|
17
|
+
return facetId
|
|
18
|
+
.toUpperCase()
|
|
19
|
+
.replace(/[/:-]/g, '_')
|
|
20
|
+
.replace(/[^A-Z0-9_]/g, '');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate TypeScript types file from facets
|
|
24
|
+
*/
|
|
25
|
+
function generateTypesFile(facets, featureName) {
|
|
26
|
+
const facetIds = facets.map(f => f.id);
|
|
27
|
+
// Generate the union type
|
|
28
|
+
const unionType = facetIds.length > 0
|
|
29
|
+
? facetIds.map(id => ` | '${id}'`).join('\n')
|
|
30
|
+
: " | never";
|
|
31
|
+
// Generate constants for each facet ID (for autocomplete)
|
|
32
|
+
const constants = facets.map(f => {
|
|
33
|
+
const constName = toConstantName(f.id);
|
|
34
|
+
const comment = f.title ? ` /** ${f.title} */` : '';
|
|
35
|
+
return `${comment}\n ${constName}: '${f.id}' as const,`;
|
|
36
|
+
}).join('\n');
|
|
37
|
+
// Generate the types file content
|
|
38
|
+
return `/**
|
|
39
|
+
* Auto-generated Facet types for feature: ${featureName}
|
|
40
|
+
* Generated by: bunx facet generate
|
|
41
|
+
*
|
|
42
|
+
* DO NOT EDIT THIS FILE MANUALLY
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* All valid facet IDs for the "${featureName}" feature
|
|
47
|
+
*/
|
|
48
|
+
export type FacetId =
|
|
49
|
+
${unionType};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Facet ID constants for autocomplete and type-safe references
|
|
53
|
+
*/
|
|
54
|
+
export const Facets = {
|
|
55
|
+
${constants}
|
|
56
|
+
} as const;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Type-safe facet annotation helper
|
|
60
|
+
* Works with any testing framework
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Use with constants (recommended - full autocomplete)
|
|
64
|
+
* // @facet \${Facets.BUSINESS_GUEST_PURCHASE_FLOW}
|
|
65
|
+
* test('my test', () => { ... });
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Use with facet() for runtime metadata
|
|
69
|
+
* const metadata = facet(Facets.BUSINESS_GUEST_PURCHASE_FLOW, Facets.COMPLIANCE_PCI_DSS);
|
|
70
|
+
*/
|
|
71
|
+
export function facet<T extends FacetId>(...facetIds: T[]): { facets: T[]; toString: () => string } {
|
|
72
|
+
return {
|
|
73
|
+
facets: facetIds,
|
|
74
|
+
toString: () => facetIds.join(', '),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get all facet IDs as an array
|
|
80
|
+
*/
|
|
81
|
+
export const allFacetIds: FacetId[] = [
|
|
82
|
+
${facetIds.map(id => ` '${id}',`).join('\n')}
|
|
83
|
+
];
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Generate global types file that combines all features
|
|
88
|
+
*/
|
|
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) {
|
|
11
298
|
const facetsDir = (0, path_1.resolve)(process.cwd(), dir);
|
|
12
299
|
if (!(0, fs_1.existsSync)(facetsDir)) {
|
|
13
300
|
console.error(`❌ Directory not found: ${facetsDir}`);
|
|
@@ -15,27 +302,29 @@ async function generateCommand(dir, options = {}) {
|
|
|
15
302
|
}
|
|
16
303
|
console.log(`💎 Generating structure from: ${facetsDir}`);
|
|
17
304
|
// Find all markdown files in the directory
|
|
18
|
-
const files = (
|
|
305
|
+
const files = findFacetFilesInDir(facetsDir);
|
|
19
306
|
if (files.length === 0) {
|
|
20
307
|
console.error(`❌ No markdown files found in: ${facetsDir}`);
|
|
21
308
|
process.exit(1);
|
|
22
309
|
}
|
|
23
310
|
const parser = new FacetParser_js_1.FacetParser();
|
|
24
311
|
const facets = [];
|
|
25
|
-
for (const
|
|
26
|
-
const filePath = (0, path_1.join)(facetsDir, file);
|
|
312
|
+
for (const filePath of files) {
|
|
27
313
|
const parsed = parser.parseFile(filePath);
|
|
28
|
-
|
|
29
|
-
const type =
|
|
314
|
+
const file = (0, path_1.basename)(filePath);
|
|
315
|
+
const type = getFacetType(filePath, options);
|
|
30
316
|
console.log(` 📄 ${file}`);
|
|
31
317
|
for (const section of parsed.sections) {
|
|
32
|
-
// Only include top-level sections (h2 or the first h1 if no h2s)
|
|
33
318
|
if (section.level <= 2) {
|
|
34
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}`;
|
|
35
324
|
facets.push({
|
|
36
325
|
id: facetId,
|
|
37
326
|
source: {
|
|
38
|
-
file:
|
|
327
|
+
file: sourcePath,
|
|
39
328
|
section: section.slug,
|
|
40
329
|
},
|
|
41
330
|
type,
|
|
@@ -63,5 +352,78 @@ async function generateCommand(dir, options = {}) {
|
|
|
63
352
|
console.log(`\n✅ Generated: ${outputPath}`);
|
|
64
353
|
console.log(` Feature: ${featureName}`);
|
|
65
354
|
console.log(` Facets: ${facets.length}`);
|
|
355
|
+
// Generate TypeScript types file (unless disabled)
|
|
356
|
+
if (!options.noTypes) {
|
|
357
|
+
const typesContent = generateTypesFile(facets, featureName);
|
|
358
|
+
const typesPath = (0, path_1.join)(outputDir, 'facets.ts');
|
|
359
|
+
(0, fs_1.writeFileSync)(typesPath, typesContent);
|
|
360
|
+
console.log(` Types: ${typesPath}`);
|
|
361
|
+
}
|
|
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
|
+
}
|
|
66
428
|
}
|
|
67
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
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD5E"}
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.watchCommand = watchCommand;
|
|
4
|
-
const fs_1 = require("fs");
|
|
5
|
-
const path_1 = require("path");
|
|
6
4
|
const chokidar_1 = require("chokidar");
|
|
7
5
|
const CoverageCalculator_js_1 = require("../../core/CoverageCalculator.js");
|
|
8
6
|
const Validator_js_1 = require("../../core/Validator.js");
|
|
9
7
|
const JsonReporter_js_1 = require("../../reporters/JsonReporter.js");
|
|
10
8
|
const HtmlReporter_js_1 = require("../../reporters/HtmlReporter.js");
|
|
11
9
|
const MarkdownReporter_js_1 = require("../../reporters/MarkdownReporter.js");
|
|
12
|
-
const
|
|
10
|
+
const config_js_1 = require("../utils/config.js");
|
|
13
11
|
/**
|
|
14
12
|
* Watch for changes and re-run analysis
|
|
15
13
|
*/
|
|
16
14
|
async function watchCommand(options = {}) {
|
|
17
15
|
const cwd = process.cwd();
|
|
18
16
|
// Load config
|
|
19
|
-
const config = await loadConfig(options.config, cwd);
|
|
17
|
+
const config = await (0, config_js_1.loadConfig)(options.config, cwd);
|
|
20
18
|
console.log('💎 Facet Coverage Watch Mode\n');
|
|
21
19
|
console.log('Watching for changes...\n');
|
|
22
20
|
// Initial run
|
|
@@ -118,34 +116,4 @@ async function runAnalysis(config, cwd, validate = false) {
|
|
|
118
116
|
console.error('❌ Error during analysis:', error);
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
|
-
/**
|
|
122
|
-
* Load configuration from file or use defaults
|
|
123
|
-
*/
|
|
124
|
-
async function loadConfig(configPath, cwd) {
|
|
125
|
-
const configFiles = [
|
|
126
|
-
configPath,
|
|
127
|
-
'facet.config.js',
|
|
128
|
-
'facet.config.mjs',
|
|
129
|
-
'facet.config.json',
|
|
130
|
-
].filter(Boolean);
|
|
131
|
-
for (const file of configFiles) {
|
|
132
|
-
const fullPath = (0, path_1.resolve)(cwd, file);
|
|
133
|
-
if ((0, fs_1.existsSync)(fullPath)) {
|
|
134
|
-
if (file.endsWith('.json')) {
|
|
135
|
-
const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
|
|
136
|
-
return { ...types_js_1.defaultConfig, ...JSON.parse(content) };
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
try {
|
|
140
|
-
const imported = await import(fullPath);
|
|
141
|
-
return { ...types_js_1.defaultConfig, ...(imported.default || imported) };
|
|
142
|
-
}
|
|
143
|
-
catch (error) {
|
|
144
|
-
console.warn(`Warning: Could not load config from ${file}`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return types_js_1.defaultConfig;
|
|
150
|
-
}
|
|
151
119
|
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -9,14 +9,18 @@ const program = new commander_1.Command();
|
|
|
9
9
|
program
|
|
10
10
|
.name('facet')
|
|
11
11
|
.description('💎 Test every facet of your features - natural specifications with rigorous coverage tracking')
|
|
12
|
-
.version('0.
|
|
12
|
+
.version('0.3.0');
|
|
13
13
|
// Generate command
|
|
14
14
|
program
|
|
15
|
-
.command('generate
|
|
16
|
-
.description('Generate structure.json from facet markdown files')
|
|
17
|
-
.option('-o, --output <path>', 'Output directory for structure.json')
|
|
15
|
+
.command('generate [dir]')
|
|
16
|
+
.description('Generate structure.json and TypeScript types from facet markdown files')
|
|
17
|
+
.option('-o, --output <path>', 'Output directory for structure.json and facets.ts')
|
|
18
18
|
.option('-t, --type <type>', 'Override facet type (default: derived from filename)')
|
|
19
|
-
.
|
|
19
|
+
.option('-c, --config <path>', 'Path to config file')
|
|
20
|
+
.option('--global', 'Generate global combined types at root .facet/')
|
|
21
|
+
.option('--no-types', 'Skip TypeScript types generation')
|
|
22
|
+
.option('-q, --quiet', 'Suppress ID change warnings')
|
|
23
|
+
.action((dir, options) => (0, generate_js_1.generateCommand)(dir, options));
|
|
20
24
|
// Analyze command
|
|
21
25
|
program
|
|
22
26
|
.command('analyze')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACpE,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,6BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,2BAAc,CAAC,CAAC;AAE1B,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,6BAAe,CAAC,CAAC;AAE3B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|