@facet-coverage/core 0.2.0 → 0.4.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.
Files changed (41) hide show
  1. package/README.md +64 -523
  2. package/dist/cli/commands/analyze.d.ts.map +1 -1
  3. package/dist/cli/commands/analyze.js +2 -35
  4. package/dist/cli/commands/analyze.js.map +1 -1
  5. package/dist/cli/commands/generate.d.ts +5 -2
  6. package/dist/cli/commands/generate.d.ts.map +1 -1
  7. package/dist/cli/commands/generate.js +496 -16
  8. package/dist/cli/commands/generate.js.map +1 -1
  9. package/dist/cli/commands/validate.d.ts.map +1 -1
  10. package/dist/cli/commands/validate.js +2 -34
  11. package/dist/cli/commands/validate.js.map +1 -1
  12. package/dist/cli/commands/watch.d.ts.map +1 -1
  13. package/dist/cli/commands/watch.js +2 -34
  14. package/dist/cli/commands/watch.js.map +1 -1
  15. package/dist/cli/index.js +6 -3
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/utils/config.d.ts +15 -0
  18. package/dist/cli/utils/config.d.ts.map +1 -0
  19. package/dist/cli/utils/config.js +88 -0
  20. package/dist/cli/utils/config.js.map +1 -0
  21. package/dist/core/FacetParser.d.ts +54 -2
  22. package/dist/core/FacetParser.d.ts.map +1 -1
  23. package/dist/core/FacetParser.js +151 -3
  24. package/dist/core/FacetParser.js.map +1 -1
  25. package/dist/core/IDChangeDetector.d.ts +50 -0
  26. package/dist/core/IDChangeDetector.d.ts.map +1 -0
  27. package/dist/core/IDChangeDetector.js +147 -0
  28. package/dist/core/IDChangeDetector.js.map +1 -0
  29. package/dist/core/TestScanner.d.ts +11 -0
  30. package/dist/core/TestScanner.d.ts.map +1 -1
  31. package/dist/core/TestScanner.js +76 -6
  32. package/dist/core/TestScanner.js.map +1 -1
  33. package/dist/core/Validator.d.ts +4 -0
  34. package/dist/core/Validator.d.ts.map +1 -1
  35. package/dist/core/Validator.js +22 -4
  36. package/dist/core/Validator.js.map +1 -1
  37. package/dist/types.d.ts +32 -2
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/types.js +2 -0
  40. package/dist/types.js.map +1 -1
  41. package/package.json +1 -1
@@ -3,16 +3,49 @@ 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
- * Convert a facet ID to a valid TypeScript identifier
9
- * e.g., "business:guest-purchase-flow" -> "BUSINESS_GUEST_PURCHASE_FLOW"
12
+ * Convert a facet ID to a valid TypeScript identifier.
13
+ *
14
+ * Uses these conventions:
15
+ * - `:` and `-` become single underscore `_`
16
+ * - `/` in path (before `:`) becomes single underscore `_`
17
+ * - `/` after `:` (sub-facet separator) becomes double underscore `__`
18
+ *
19
+ * Examples:
20
+ * - "business:guest-purchase-flow" -> "BUSINESS_GUEST_PURCHASE_FLOW"
21
+ * - "checkout/payments/pci:card-storage" -> "CHECKOUT_PAYMENTS_PCI_CARD_STORAGE"
22
+ * - "compliance:pci-dss/tls" -> "COMPLIANCE_PCI_DSS__TLS" (sub-facet uses __)
10
23
  */
11
24
  function toConstantName(facetId) {
12
- return facetId
13
- .toUpperCase()
14
- .replace(/[:-]/g, '_')
15
- .replace(/[^A-Z0-9_]/g, '');
25
+ const colonIndex = facetId.indexOf(':');
26
+ if (colonIndex === -1) {
27
+ // No colon, simple conversion
28
+ return facetId.toUpperCase().replace(/[/-]/g, '_').replace(/[^A-Z0-9_]/g, '');
29
+ }
30
+ // Split into path+type part and section part
31
+ const pathAndType = facetId.substring(0, colonIndex);
32
+ const section = facetId.substring(colonIndex + 1);
33
+ // For path+type: / and - become _
34
+ const pathPart = pathAndType.toUpperCase().replace(/[/-]/g, '_').replace(/[^A-Z0-9_]/g, '');
35
+ // For section: - becomes _, / becomes __ (sub-facet separator)
36
+ const sectionPart = section.toUpperCase().replace(/\//g, '__').replace(/-/g, '_').replace(/[^A-Z0-9_]/g, '');
37
+ return `${pathPart}_${sectionPart}`;
38
+ }
39
+ /**
40
+ * Escape a title for use in JSDoc comments.
41
+ * Removes backticks and other problematic characters.
42
+ */
43
+ function escapeJsDocTitle(title) {
44
+ return title
45
+ .replace(/`/g, "'") // Replace backticks with single quotes
46
+ .replace(/\*/g, '') // Remove asterisks (would close JSDoc)
47
+ .replace(/\n/g, ' ') // Replace newlines with spaces
48
+ .trim();
16
49
  }
17
50
  /**
18
51
  * Generate TypeScript types file from facets
@@ -26,7 +59,7 @@ function generateTypesFile(facets, featureName) {
26
59
  // Generate constants for each facet ID (for autocomplete)
27
60
  const constants = facets.map(f => {
28
61
  const constName = toConstantName(f.id);
29
- const comment = f.title ? ` /** ${f.title} */` : '';
62
+ const comment = f.title ? ` /** ${escapeJsDocTitle(f.title)} */` : '';
30
63
  return `${comment}\n ${constName}: '${f.id}' as const,`;
31
64
  }).join('\n');
32
65
  // Generate the types file content
@@ -79,9 +112,302 @@ ${facetIds.map(id => ` '${id}',`).join('\n')}
79
112
  `;
80
113
  }
81
114
  /**
82
- * Generate structure.json from facet markdown files
115
+ * Generate global types file that combines all features
83
116
  */
84
- async function generateCommand(dir, options = {}) {
117
+ function generateGlobalTypesFile(allFacets, featureImports) {
118
+ const facetIds = allFacets.map(f => f.id);
119
+ // Generate the union type
120
+ const unionType = facetIds.length > 0
121
+ ? facetIds.map(id => ` | '${id}'`).join('\n')
122
+ : " | never";
123
+ // Generate constants for each facet ID
124
+ const constants = allFacets.map(f => {
125
+ const constName = toConstantName(f.id);
126
+ const comment = f.title ? ` /** ${escapeJsDocTitle(f.title)} */` : '';
127
+ return `${comment}\n ${constName}: '${f.id}' as const,`;
128
+ }).join('\n');
129
+ // Generate re-exports for each feature
130
+ const reExports = Array.from(featureImports.entries())
131
+ .map(([feature, path]) => `export * as ${feature} from '${path}';`)
132
+ .join('\n');
133
+ return `/**
134
+ * Auto-generated Global Facet types
135
+ * Combines all features for single import point
136
+ *
137
+ * Generated by: bunx facet generate --global
138
+ * DO NOT EDIT THIS FILE MANUALLY
139
+ */
140
+
141
+ // Re-export all feature-specific types
142
+ ${reExports}
143
+
144
+ /**
145
+ * All valid facet IDs across ALL features
146
+ */
147
+ export type FacetId =
148
+ ${unionType};
149
+
150
+ /**
151
+ * Combined Facet ID constants from all features
152
+ */
153
+ export const Facets = {
154
+ ${constants}
155
+ } as const;
156
+
157
+ /**
158
+ * Type-safe facet annotation helper (global version)
159
+ */
160
+ export function facet<T extends FacetId>(...facetIds: T[]): { facets: T[]; toString: () => string } {
161
+ return {
162
+ facets: facetIds,
163
+ toString: () => facetIds.join(', '),
164
+ };
165
+ }
166
+
167
+ /**
168
+ * All facet IDs across all features
169
+ */
170
+ export const allFacetIds: FacetId[] = [
171
+ ${facetIds.map(id => ` '${id}',`).join('\n')}
172
+ ];
173
+ `;
174
+ }
175
+ /**
176
+ * Get facet type from file path.
177
+ * Handles both .facet.md and .md extensions.
178
+ */
179
+ function getFacetType(filePath, options) {
180
+ if (options.type) {
181
+ return options.type;
182
+ }
183
+ return FacetParser_js_1.FacetParser.getFilePrefix(filePath);
184
+ }
185
+ /**
186
+ * Find facet files in a directory (both conventions)
187
+ */
188
+ function findFacetFilesInDir(dir) {
189
+ const files = [];
190
+ // Find *.facet.md files in the directory
191
+ const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
192
+ for (const entry of entries) {
193
+ if (entry.isFile()) {
194
+ if (entry.name.endsWith('.facet.md') || entry.name.endsWith('.md')) {
195
+ files.push((0, path_1.join)(dir, entry.name));
196
+ }
197
+ }
198
+ }
199
+ return files;
200
+ }
201
+ /**
202
+ * Recursively discover all facet files matching patterns
203
+ */
204
+ async function discoverFacetFiles(rootDir, patterns) {
205
+ const allFiles = [];
206
+ for (const pattern of patterns) {
207
+ const matches = await (0, glob_1.glob)(pattern, { cwd: rootDir, absolute: true });
208
+ allFiles.push(...matches);
209
+ }
210
+ // Remove duplicates
211
+ return [...new Set(allFiles)];
212
+ }
213
+ /**
214
+ * Group facet files by their feature directory
215
+ */
216
+ function groupByFeature(files, rootDir) {
217
+ const groups = new Map();
218
+ for (const file of files) {
219
+ // Determine feature directory
220
+ let featureDir;
221
+ const fileDir = (0, path_1.dirname)(file);
222
+ if ((0, path_1.basename)(fileDir) === 'facets') {
223
+ // Legacy: features/checkout/facets/business.md -> features/checkout
224
+ featureDir = (0, path_1.dirname)(fileDir);
225
+ }
226
+ else {
227
+ // New: features/checkout/business.facet.md -> features/checkout
228
+ featureDir = fileDir;
229
+ }
230
+ const existing = groups.get(featureDir) || [];
231
+ existing.push(file);
232
+ groups.set(featureDir, existing);
233
+ }
234
+ return groups;
235
+ }
236
+ /**
237
+ * Process a single feature directory and generate outputs
238
+ */
239
+ async function processFeature(featureDir, files, rootDir, options, config) {
240
+ const parser = new FacetParser_js_1.FacetParser();
241
+ const facets = [];
242
+ const featureName = (0, path_1.basename)(featureDir);
243
+ console.log(`\n Feature: ${featureName}`);
244
+ // Get configured sub-facet heading levels (default: none - only list items and comment markers)
245
+ const subFacetHeadingLevels = config?.subFacetHeadingLevels || [];
246
+ for (const filePath of files) {
247
+ const parsed = parser.parseFile(filePath);
248
+ const type = getFacetType(filePath, options);
249
+ const fileName = (0, path_1.basename)(filePath);
250
+ console.log(` 📄 ${fileName}`);
251
+ // Track current parent facet for h3+ sub-facets
252
+ let currentParentFacetId = null;
253
+ let currentParentSection = null;
254
+ // Determine relative source path
255
+ const sourcePath = FacetParser_js_1.FacetParser.isFacetMdFile(filePath)
256
+ ? fileName
257
+ : `facets/${fileName}`;
258
+ for (const section of parsed.sections) {
259
+ // Use hierarchical ID if nested, simple ID otherwise
260
+ const relPath = (0, path_1.relative)(rootDir, featureDir);
261
+ const isNested = relPath.includes('/') || relPath !== (0, path_1.basename)(featureDir);
262
+ // Check if this section level should be a sub-facet
263
+ const isSubFacetLevel = subFacetHeadingLevels.includes(section.level);
264
+ // Top-level sections (h2 or h1) become parent facets
265
+ if (section.level <= 2) {
266
+ const facetId = isNested
267
+ ? FacetParser_js_1.FacetParser.generateHierarchicalFacetId(rootDir, filePath, section.slug)
268
+ : FacetParser_js_1.FacetParser.generateFacetId(filePath, section.slug);
269
+ // Add parent facet
270
+ facets.push({
271
+ id: facetId,
272
+ source: {
273
+ file: sourcePath,
274
+ section: section.slug,
275
+ },
276
+ type,
277
+ title: section.title,
278
+ });
279
+ console.log(` ✓ ${facetId}`);
280
+ // Track as current parent for h3+ sections
281
+ currentParentFacetId = facetId;
282
+ currentParentSection = section.slug;
283
+ // Process sub-facets from list items and comments if present
284
+ if (section.subFacets && section.subFacets.length > 0) {
285
+ for (const subFacet of section.subFacets) {
286
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(facetId, subFacet.id);
287
+ facets.push({
288
+ id: subFacetId,
289
+ source: {
290
+ file: sourcePath,
291
+ section: section.slug,
292
+ line: subFacet.line,
293
+ },
294
+ type,
295
+ title: subFacet.title,
296
+ parentId: facetId,
297
+ isSubFacet: true,
298
+ });
299
+ console.log(` └─ ${subFacetId}`);
300
+ }
301
+ }
302
+ }
303
+ // h3+ sections with explicit IDs become sub-facets if configured
304
+ else if (isSubFacetLevel && section.explicitId && currentParentFacetId) {
305
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(currentParentFacetId, section.explicitId);
306
+ facets.push({
307
+ id: subFacetId,
308
+ source: {
309
+ file: sourcePath,
310
+ section: currentParentSection || section.slug,
311
+ line: section.startLine,
312
+ },
313
+ type,
314
+ title: section.title,
315
+ parentId: currentParentFacetId,
316
+ isSubFacet: true,
317
+ });
318
+ console.log(` └─ ${subFacetId}`);
319
+ // Also process any sub-facets within this h3+ section (list items, comments)
320
+ if (section.subFacets && section.subFacets.length > 0) {
321
+ for (const subFacet of section.subFacets) {
322
+ const nestedSubFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(subFacetId, subFacet.id);
323
+ facets.push({
324
+ id: nestedSubFacetId,
325
+ source: {
326
+ file: sourcePath,
327
+ section: currentParentSection || section.slug,
328
+ line: subFacet.line,
329
+ },
330
+ type,
331
+ title: subFacet.title,
332
+ parentId: subFacetId,
333
+ isSubFacet: true,
334
+ });
335
+ console.log(` └─ ${nestedSubFacetId}`);
336
+ }
337
+ }
338
+ }
339
+ // h3+ sections without explicit IDs: attach their sub-facets to current parent
340
+ else if (section.level > 2 && currentParentFacetId && section.subFacets && section.subFacets.length > 0) {
341
+ for (const subFacet of section.subFacets) {
342
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(currentParentFacetId, subFacet.id);
343
+ facets.push({
344
+ id: subFacetId,
345
+ source: {
346
+ file: sourcePath,
347
+ section: currentParentSection || section.slug,
348
+ line: subFacet.line,
349
+ },
350
+ type,
351
+ title: subFacet.title,
352
+ parentId: currentParentFacetId,
353
+ isSubFacet: true,
354
+ });
355
+ console.log(` └─ ${subFacetId}`);
356
+ }
357
+ }
358
+ }
359
+ }
360
+ // Determine output directory
361
+ const outputDir = options.output || (0, path_1.join)(featureDir, '.facet');
362
+ // Build structure object
363
+ const structure = {
364
+ feature: featureName,
365
+ facets,
366
+ };
367
+ // Ensure output directory exists
368
+ (0, fs_1.mkdirSync)(outputDir, { recursive: true });
369
+ // Write structure file
370
+ const structurePath = (0, path_1.join)(outputDir, 'structure.json');
371
+ // Detect ID changes before writing
372
+ if (!options.quiet) {
373
+ const changeReport = IDChangeDetector_js_1.IDChangeDetector.detectChanges(structurePath, facets);
374
+ if (changeReport.hasChanges) {
375
+ console.log('\n ⚠️ Facet ID Changes Detected:');
376
+ const reportLines = IDChangeDetector_js_1.IDChangeDetector.formatReport(changeReport);
377
+ for (const line of reportLines) {
378
+ console.log(line);
379
+ }
380
+ // Show affected tests if we have config
381
+ if (config && (changeReport.renamed.length > 0 || changeReport.removed.length > 0)) {
382
+ const scanner = new TestScanner_js_1.TestScanner(config);
383
+ const affected = await IDChangeDetector_js_1.IDChangeDetector.findAffectedTests(changeReport, scanner, rootDir);
384
+ if (affected.size > 0) {
385
+ console.log('\n Tests that may need updates:');
386
+ for (const [oldId, tests] of affected) {
387
+ console.log(`\n For "${oldId}":`);
388
+ for (const test of tests) {
389
+ console.log(` - ${test.file}:${test.line} "${test.title}"`);
390
+ }
391
+ }
392
+ }
393
+ }
394
+ console.log('');
395
+ }
396
+ }
397
+ (0, fs_1.writeFileSync)(structurePath, JSON.stringify(structure, null, 2));
398
+ // Generate TypeScript types file (unless disabled)
399
+ if (!options.noTypes) {
400
+ const typesContent = generateTypesFile(facets, featureName);
401
+ const typesPath = (0, path_1.join)(outputDir, 'facets.ts');
402
+ (0, fs_1.writeFileSync)(typesPath, typesContent);
403
+ }
404
+ console.log(` ✅ Generated: ${(0, path_1.relative)(process.cwd(), outputDir)}`);
405
+ return { facets, outputDir };
406
+ }
407
+ /**
408
+ * Generate from explicit directory (backwards compatible)
409
+ */
410
+ async function generateFromDirectory(dir, options, config) {
85
411
  const facetsDir = (0, path_1.resolve)(process.cwd(), dir);
86
412
  if (!(0, fs_1.existsSync)(facetsDir)) {
87
413
  console.error(`❌ Directory not found: ${facetsDir}`);
@@ -89,33 +415,120 @@ async function generateCommand(dir, options = {}) {
89
415
  }
90
416
  console.log(`💎 Generating structure from: ${facetsDir}`);
91
417
  // Find all markdown files in the directory
92
- const files = (0, fs_1.readdirSync)(facetsDir).filter(f => f.endsWith('.md'));
418
+ const files = findFacetFilesInDir(facetsDir);
93
419
  if (files.length === 0) {
94
420
  console.error(`❌ No markdown files found in: ${facetsDir}`);
95
421
  process.exit(1);
96
422
  }
97
423
  const parser = new FacetParser_js_1.FacetParser();
98
424
  const facets = [];
99
- for (const file of files) {
100
- const filePath = (0, path_1.join)(facetsDir, file);
425
+ // Get configured sub-facet heading levels (default: none)
426
+ const subFacetHeadingLevels = config?.subFacetHeadingLevels || [];
427
+ for (const filePath of files) {
101
428
  const parsed = parser.parseFile(filePath);
102
- // Determine facet type from filename (e.g., business.md -> business)
103
- const type = options.type || (0, path_1.basename)(file, '.md');
429
+ const file = (0, path_1.basename)(filePath);
430
+ const type = getFacetType(filePath, options);
104
431
  console.log(` 📄 ${file}`);
432
+ // Track current parent facet for h3+ sub-facets
433
+ let currentParentFacetId = null;
434
+ let currentParentSection = null;
435
+ // Determine source path based on file type
436
+ const sourcePath = FacetParser_js_1.FacetParser.isFacetMdFile(filePath)
437
+ ? file
438
+ : `facets/${file}`;
105
439
  for (const section of parsed.sections) {
106
- // Only include top-level sections (h2 or the first h1 if no h2s)
440
+ // Check if this section level should be a sub-facet
441
+ const isSubFacetLevel = subFacetHeadingLevels.includes(section.level);
442
+ // Top-level sections (h2 or h1) become parent facets
107
443
  if (section.level <= 2) {
108
444
  const facetId = FacetParser_js_1.FacetParser.generateFacetId(file, section.slug);
109
445
  facets.push({
110
446
  id: facetId,
111
447
  source: {
112
- file: `facets/${file}`,
448
+ file: sourcePath,
113
449
  section: section.slug,
114
450
  },
115
451
  type,
116
452
  title: section.title,
117
453
  });
118
454
  console.log(` ✓ ${facetId}`);
455
+ // Track as current parent for h3+ sections
456
+ currentParentFacetId = facetId;
457
+ currentParentSection = section.slug;
458
+ // Process sub-facets from list items and comments if present
459
+ if (section.subFacets && section.subFacets.length > 0) {
460
+ for (const subFacet of section.subFacets) {
461
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(facetId, subFacet.id);
462
+ facets.push({
463
+ id: subFacetId,
464
+ source: {
465
+ file: sourcePath,
466
+ section: section.slug,
467
+ line: subFacet.line,
468
+ },
469
+ type,
470
+ title: subFacet.title,
471
+ parentId: facetId,
472
+ isSubFacet: true,
473
+ });
474
+ console.log(` └─ ${subFacetId}`);
475
+ }
476
+ }
477
+ }
478
+ // h3+ sections with explicit IDs become sub-facets if configured
479
+ else if (isSubFacetLevel && section.explicitId && currentParentFacetId) {
480
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(currentParentFacetId, section.explicitId);
481
+ facets.push({
482
+ id: subFacetId,
483
+ source: {
484
+ file: sourcePath,
485
+ section: currentParentSection || section.slug,
486
+ line: section.startLine,
487
+ },
488
+ type,
489
+ title: section.title,
490
+ parentId: currentParentFacetId,
491
+ isSubFacet: true,
492
+ });
493
+ console.log(` └─ ${subFacetId}`);
494
+ // Also process any sub-facets within this h3+ section
495
+ if (section.subFacets && section.subFacets.length > 0) {
496
+ for (const subFacet of section.subFacets) {
497
+ const nestedSubFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(subFacetId, subFacet.id);
498
+ facets.push({
499
+ id: nestedSubFacetId,
500
+ source: {
501
+ file: sourcePath,
502
+ section: currentParentSection || section.slug,
503
+ line: subFacet.line,
504
+ },
505
+ type,
506
+ title: subFacet.title,
507
+ parentId: subFacetId,
508
+ isSubFacet: true,
509
+ });
510
+ console.log(` └─ ${nestedSubFacetId}`);
511
+ }
512
+ }
513
+ }
514
+ // h3+ sections without explicit IDs: attach their sub-facets to current parent
515
+ else if (section.level > 2 && currentParentFacetId && section.subFacets && section.subFacets.length > 0) {
516
+ for (const subFacet of section.subFacets) {
517
+ const subFacetId = FacetParser_js_1.FacetParser.generateSubFacetId(currentParentFacetId, subFacet.id);
518
+ facets.push({
519
+ id: subFacetId,
520
+ source: {
521
+ file: sourcePath,
522
+ section: currentParentSection || section.slug,
523
+ line: subFacet.line,
524
+ },
525
+ type,
526
+ title: subFacet.title,
527
+ parentId: currentParentFacetId,
528
+ isSubFacet: true,
529
+ });
530
+ console.log(` └─ ${subFacetId}`);
531
+ }
119
532
  }
120
533
  }
121
534
  }
@@ -145,4 +558,71 @@ async function generateCommand(dir, options = {}) {
145
558
  console.log(` Types: ${typesPath}`);
146
559
  }
147
560
  }
561
+ /**
562
+ * Generate from config patterns
563
+ */
564
+ async function generateFromConfig(config, options) {
565
+ const cwd = process.cwd();
566
+ // Get facet patterns from config
567
+ const patterns = Array.isArray(config.facetPattern)
568
+ ? config.facetPattern
569
+ : config.facetPattern
570
+ ? [config.facetPattern]
571
+ : ['features/**/*.facet.md', 'features/**/facets/*.md'];
572
+ console.log('💎 Discovering facet files...\n');
573
+ // Find all matching files
574
+ const files = await discoverFacetFiles(cwd, patterns);
575
+ if (files.length === 0) {
576
+ console.error('❌ No facet files found matching patterns:');
577
+ for (const pattern of patterns) {
578
+ console.error(` - ${pattern}`);
579
+ }
580
+ console.error('\nMake sure facet files exist or specify a directory explicitly:');
581
+ console.error(' bunx facet generate features/checkout/facets/');
582
+ process.exit(1);
583
+ }
584
+ console.log(`Found ${files.length} facet file(s)`);
585
+ // Group files by feature
586
+ const featureGroups = groupByFeature(files, cwd);
587
+ const allFacets = [];
588
+ const featureOutputs = new Map();
589
+ // Process each feature
590
+ for (const [featureDir, featureFiles] of featureGroups) {
591
+ const { facets, outputDir } = await processFeature(featureDir, featureFiles, cwd, options, config);
592
+ allFacets.push(...facets);
593
+ // Store for global types
594
+ const featureName = (0, path_1.basename)(featureDir);
595
+ const relativeOutput = (0, path_1.relative)((0, path_1.join)(cwd, '.facet'), (0, path_1.join)(outputDir, 'facets'));
596
+ featureOutputs.set(featureName, relativeOutput);
597
+ }
598
+ // Generate global types if requested
599
+ if (options.global && !options.noTypes) {
600
+ const globalOutputDir = (0, path_1.join)(cwd, '.facet');
601
+ (0, fs_1.mkdirSync)(globalOutputDir, { recursive: true });
602
+ const globalTypesContent = generateGlobalTypesFile(allFacets, featureOutputs);
603
+ const globalTypesPath = (0, path_1.join)(globalOutputDir, 'facets.ts');
604
+ (0, fs_1.writeFileSync)(globalTypesPath, globalTypesContent);
605
+ console.log(`\n✅ Generated global types: ${(0, path_1.relative)(cwd, globalTypesPath)}`);
606
+ }
607
+ // Summary
608
+ console.log(`\n📊 Summary:`);
609
+ console.log(` Features: ${featureGroups.size}`);
610
+ console.log(` Total Facets: ${allFacets.length}`);
611
+ }
612
+ /**
613
+ * Generate structure.json and TypeScript types from facet markdown files
614
+ */
615
+ async function generateCommand(dir, options = {}) {
616
+ const cwd = process.cwd();
617
+ // Always try to load config for options like subFacetHeadingLevels
618
+ const config = await (0, config_js_1.loadConfig)(options.config, cwd);
619
+ if (dir) {
620
+ // Backwards compatible: explicit directory provided, but pass config for options
621
+ await generateFromDirectory(dir, options, config);
622
+ }
623
+ else {
624
+ // New behavior: use config to find facet files
625
+ await generateFromConfig(config, options);
626
+ }
627
+ }
148
628
  //# 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":"AAMA,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
+ {"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"}