@refrakt-md/cli 0.4.0 → 0.5.1

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 (87) hide show
  1. package/dist/bin.js +499 -9
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/contracts.d.ts +6 -0
  4. package/dist/commands/contracts.d.ts.map +1 -0
  5. package/dist/commands/contracts.js +41 -0
  6. package/dist/commands/contracts.js.map +1 -0
  7. package/dist/commands/edit.d.ts +8 -0
  8. package/dist/commands/edit.d.ts.map +1 -0
  9. package/dist/commands/edit.js +100 -0
  10. package/dist/commands/edit.js.map +1 -0
  11. package/dist/commands/extract.d.ts +10 -0
  12. package/dist/commands/extract.d.ts.map +1 -0
  13. package/dist/commands/extract.js +158 -0
  14. package/dist/commands/extract.js.map +1 -0
  15. package/dist/commands/inspect.d.ts +33 -0
  16. package/dist/commands/inspect.d.ts.map +1 -0
  17. package/dist/commands/inspect.js +269 -0
  18. package/dist/commands/inspect.js.map +1 -0
  19. package/dist/commands/scaffold-css.d.ts +6 -0
  20. package/dist/commands/scaffold-css.d.ts.map +1 -0
  21. package/dist/commands/scaffold-css.js +113 -0
  22. package/dist/commands/scaffold-css.js.map +1 -0
  23. package/dist/commands/theme.d.ts +10 -0
  24. package/dist/commands/theme.d.ts.map +1 -0
  25. package/dist/commands/theme.js +160 -0
  26. package/dist/commands/theme.js.map +1 -0
  27. package/dist/commands/validate.d.ts +6 -0
  28. package/dist/commands/validate.d.ts.map +1 -0
  29. package/dist/commands/validate.js +70 -0
  30. package/dist/commands/validate.js.map +1 -0
  31. package/dist/commands/write.d.ts +7 -0
  32. package/dist/commands/write.d.ts.map +1 -1
  33. package/dist/commands/write.js +66 -10
  34. package/dist/commands/write.js.map +1 -1
  35. package/dist/config-file.d.ts +15 -0
  36. package/dist/config-file.d.ts.map +1 -0
  37. package/dist/config-file.js +47 -0
  38. package/dist/config-file.js.map +1 -0
  39. package/dist/config.d.ts +2 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +30 -2
  42. package/dist/config.js.map +1 -1
  43. package/dist/extractors/index.d.ts +3 -0
  44. package/dist/extractors/index.d.ts.map +1 -0
  45. package/dist/extractors/index.js +15 -0
  46. package/dist/extractors/index.js.map +1 -0
  47. package/dist/extractors/python.d.ts +6 -0
  48. package/dist/extractors/python.d.ts.map +1 -0
  49. package/dist/extractors/python.js +8 -0
  50. package/dist/extractors/python.js.map +1 -0
  51. package/dist/extractors/types.d.ts +55 -0
  52. package/dist/extractors/types.d.ts.map +1 -0
  53. package/dist/extractors/types.js +2 -0
  54. package/dist/extractors/types.js.map +1 -0
  55. package/dist/extractors/typescript.d.ts +28 -0
  56. package/dist/extractors/typescript.d.ts.map +1 -0
  57. package/dist/extractors/typescript.js +566 -0
  58. package/dist/extractors/typescript.js.map +1 -0
  59. package/dist/lib/css-audit.d.ts +23 -0
  60. package/dist/lib/css-audit.d.ts.map +1 -0
  61. package/dist/lib/css-audit.js +99 -0
  62. package/dist/lib/css-audit.js.map +1 -0
  63. package/dist/lib/css-resolve.d.ts +20 -0
  64. package/dist/lib/css-resolve.d.ts.map +1 -0
  65. package/dist/lib/css-resolve.js +57 -0
  66. package/dist/lib/css-resolve.js.map +1 -0
  67. package/dist/lib/fixtures.d.ts +10 -0
  68. package/dist/lib/fixtures.d.ts.map +1 -0
  69. package/dist/lib/fixtures.js +356 -0
  70. package/dist/lib/fixtures.js.map +1 -0
  71. package/dist/lib/format.d.ts +35 -0
  72. package/dist/lib/format.d.ts.map +1 -0
  73. package/dist/lib/format.js +215 -0
  74. package/dist/lib/format.js.map +1 -0
  75. package/dist/lib/layout-generator.d.ts +8 -0
  76. package/dist/lib/layout-generator.d.ts.map +1 -0
  77. package/dist/lib/layout-generator.js +22 -0
  78. package/dist/lib/layout-generator.js.map +1 -0
  79. package/dist/lib/symbol-generator.d.ts +14 -0
  80. package/dist/lib/symbol-generator.d.ts.map +1 -0
  81. package/dist/lib/symbol-generator.js +202 -0
  82. package/dist/lib/symbol-generator.js.map +1 -0
  83. package/dist/lib/variants.d.ts +17 -0
  84. package/dist/lib/variants.d.ts.map +1 -0
  85. package/dist/lib/variants.js +32 -0
  86. package/dist/lib/variants.js.map +1 -0
  87. package/package.json +9 -3
@@ -0,0 +1,100 @@
1
+ import { resolve, dirname } from 'node:path';
2
+ import { existsSync } from 'node:fs';
3
+ import { loadRefraktConfigFile } from '../config-file.js';
4
+ export async function editCommand(options) {
5
+ const cwd = process.cwd();
6
+ // Load project config
7
+ let contentDir = options.contentDir;
8
+ let themeName;
9
+ let configDir = cwd;
10
+ if (!contentDir) {
11
+ try {
12
+ const { path: configPath, config } = loadRefraktConfigFile(cwd);
13
+ configDir = dirname(configPath);
14
+ contentDir = resolve(configDir, config.contentDir);
15
+ themeName = config.theme;
16
+ }
17
+ catch {
18
+ console.error('Error: No refrakt.config.json found. Specify --content-dir or run from a refrakt.md project.');
19
+ process.exit(1);
20
+ }
21
+ }
22
+ else {
23
+ contentDir = resolve(cwd, contentDir);
24
+ }
25
+ if (!existsSync(contentDir)) {
26
+ console.error(`Error: Content directory not found: ${contentDir}`);
27
+ process.exit(1);
28
+ }
29
+ // Resolve theme config and CSS
30
+ const { themeConfig, themeCssPath } = await resolveTheme(themeName, configDir);
31
+ // Start editor
32
+ const { startEditor } = await import('@refrakt-md/editor');
33
+ await startEditor({
34
+ contentDir,
35
+ port: options.port ?? 4800,
36
+ themeConfig,
37
+ themeCssPath,
38
+ devServer: options.devServer,
39
+ open: !options.noOpen,
40
+ });
41
+ }
42
+ async function resolveTheme(themeName, configDir) {
43
+ // Always use baseConfig as the foundation
44
+ const { baseConfig } = await import('@refrakt-md/theme-base');
45
+ if (!themeName) {
46
+ return { themeConfig: baseConfig };
47
+ }
48
+ // Try to resolve theme package
49
+ try {
50
+ const themePkgDir = findThemePackage(themeName, configDir);
51
+ if (!themePkgDir) {
52
+ console.warn(`Warning: Theme "${themeName}" not found, using base config`);
53
+ return { themeConfig: baseConfig };
54
+ }
55
+ // Try to load theme's config (transform export)
56
+ let themeConfig = baseConfig;
57
+ try {
58
+ const transformModule = await import(resolve(themePkgDir, 'dist', 'config.js'));
59
+ if (transformModule.luminaConfig) {
60
+ themeConfig = transformModule.luminaConfig;
61
+ }
62
+ else if (transformModule.default) {
63
+ themeConfig = transformModule.default;
64
+ }
65
+ }
66
+ catch {
67
+ // Theme may not export a config — use baseConfig
68
+ }
69
+ // Look for CSS entry point
70
+ const cssPath = resolve(themePkgDir, 'index.css');
71
+ const themeCssPath = existsSync(cssPath) ? cssPath : undefined;
72
+ return { themeConfig, themeCssPath };
73
+ }
74
+ catch {
75
+ console.warn(`Warning: Could not resolve theme "${themeName}", using base config`);
76
+ return { themeConfig: baseConfig };
77
+ }
78
+ }
79
+ /** Find a theme package directory by checking local path, then walking up node_modules */
80
+ function findThemePackage(themeName, startDir) {
81
+ // Check if theme is a local path
82
+ const localPath = resolve(startDir, themeName);
83
+ if (existsSync(localPath) && existsSync(resolve(localPath, 'package.json'))) {
84
+ return localPath;
85
+ }
86
+ // Walk up directories looking for node_modules/{themeName}
87
+ let dir = startDir;
88
+ while (true) {
89
+ const candidate = resolve(dir, 'node_modules', themeName);
90
+ if (existsSync(resolve(candidate, 'package.json'))) {
91
+ return candidate;
92
+ }
93
+ const parent = dirname(dir);
94
+ if (parent === dir)
95
+ break;
96
+ dir = parent;
97
+ }
98
+ return null;
99
+ }
100
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ExtractOptions {
2
+ input: string;
3
+ output: string;
4
+ lang?: 'typescript' | 'python';
5
+ validate?: boolean;
6
+ sourceUrl?: string;
7
+ title?: string;
8
+ }
9
+ export declare function extractCommand(opts: ExtractOptions): Promise<void>;
10
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AA2DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GxE"}
@@ -0,0 +1,158 @@
1
+ import { resolve, join, relative, dirname } from 'node:path';
2
+ import { writeFileSync, readFileSync, existsSync, mkdirSync, readdirSync, statSync } from 'node:fs';
3
+ import { loadExtractor } from '../extractors/index.js';
4
+ import { generateSymbolMarkdown, toSlug } from '../lib/symbol-generator.js';
5
+ import { generateLayoutMarkdown } from '../lib/layout-generator.js';
6
+ function detectLanguage(inputPath) {
7
+ const abs = resolve(inputPath);
8
+ // Check if input is a single file
9
+ if (existsSync(abs) && statSync(abs).isFile()) {
10
+ if (abs.endsWith('.ts') || abs.endsWith('.tsx'))
11
+ return 'typescript';
12
+ if (abs.endsWith('.py'))
13
+ return 'python';
14
+ }
15
+ // Check for tsconfig.json
16
+ if (existsSync(join(abs, 'tsconfig.json')) ||
17
+ existsSync(join(dirname(abs), 'tsconfig.json'))) {
18
+ return 'typescript';
19
+ }
20
+ // Check directory contents
21
+ if (existsSync(abs) && statSync(abs).isDirectory()) {
22
+ try {
23
+ const files = readdirSync(abs);
24
+ if (files.some(f => f.endsWith('.ts') || f.endsWith('.tsx')))
25
+ return 'typescript';
26
+ if (files.some(f => f.endsWith('.py')))
27
+ return 'python';
28
+ }
29
+ catch {
30
+ // fall through
31
+ }
32
+ }
33
+ return 'typescript';
34
+ }
35
+ function findSourceFiles(inputPath, lang) {
36
+ const abs = resolve(inputPath);
37
+ if (!existsSync(abs))
38
+ return [];
39
+ const stat = statSync(abs);
40
+ if (stat.isFile())
41
+ return [abs];
42
+ const ext = lang === 'typescript' ? /\.tsx?$/ : /\.py$/;
43
+ return walkFiles(abs, ext);
44
+ }
45
+ function walkFiles(dir, ext) {
46
+ const files = [];
47
+ const entries = readdirSync(dir);
48
+ for (const entry of entries) {
49
+ if (entry === 'node_modules' || entry.startsWith('.'))
50
+ continue;
51
+ const fullPath = resolve(dir, entry);
52
+ const stat = statSync(fullPath);
53
+ if (stat.isDirectory()) {
54
+ files.push(...walkFiles(fullPath, ext));
55
+ }
56
+ else if (ext.test(entry) && !entry.endsWith('.d.ts') && !entry.endsWith('.test.ts') && !entry.endsWith('.spec.ts')) {
57
+ files.push(fullPath);
58
+ }
59
+ }
60
+ return files;
61
+ }
62
+ export async function extractCommand(opts) {
63
+ const inputPath = resolve(opts.input);
64
+ const outputPath = resolve(opts.output);
65
+ const lang = opts.lang ?? detectLanguage(inputPath);
66
+ if (!existsSync(inputPath)) {
67
+ console.error(`Error: Input path does not exist: ${inputPath}`);
68
+ process.exit(1);
69
+ }
70
+ // Use the directory as rootDir for the extractor (even if input is a single file)
71
+ const extractorRoot = statSync(inputPath).isDirectory() ? inputPath : dirname(inputPath);
72
+ // Load the appropriate extractor
73
+ const extractor = await loadExtractor(lang, extractorRoot, opts.sourceUrl);
74
+ // Find all source files
75
+ const sourceFiles = findSourceFiles(inputPath, lang);
76
+ if (sourceFiles.length === 0) {
77
+ console.error(`No ${lang} source files found in ${inputPath}`);
78
+ process.exit(1);
79
+ }
80
+ // Extract symbols from all files
81
+ const allSymbols = [];
82
+ for (const file of sourceFiles) {
83
+ const result = extractor.extractFile(file);
84
+ allSymbols.push(...result.symbols);
85
+ }
86
+ if (allSymbols.length === 0) {
87
+ console.log('No exported symbols found.');
88
+ return;
89
+ }
90
+ console.log(`Found ${allSymbols.length} symbols in ${sourceFiles.length} files`);
91
+ // Detect slug collisions and resolve them
92
+ const slugMap = new Map();
93
+ for (const doc of allSymbols) {
94
+ const slug = toSlug(doc.name);
95
+ const existing = slugMap.get(slug) ?? [];
96
+ existing.push(doc);
97
+ slugMap.set(slug, existing);
98
+ }
99
+ // Generate Markdown for each symbol
100
+ const generated = new Map();
101
+ for (const [slug, docs] of slugMap) {
102
+ if (docs.length === 1) {
103
+ const filePath = join(outputPath, `${slug}.md`);
104
+ generated.set(filePath, generateSymbolMarkdown(docs[0]));
105
+ }
106
+ else {
107
+ // Resolve collisions by appending kind
108
+ for (const doc of docs) {
109
+ const uniqueSlug = `${slug}-${doc.kind}`;
110
+ const filePath = join(outputPath, `${uniqueSlug}.md`);
111
+ generated.set(filePath, generateSymbolMarkdown(doc));
112
+ }
113
+ }
114
+ }
115
+ // Generate _layout.md
116
+ const layoutPath = join(outputPath, '_layout.md');
117
+ const layoutContent = generateLayoutMarkdown(allSymbols, { title: opts.title });
118
+ generated.set(layoutPath, layoutContent);
119
+ // Validate mode: compare generated to existing
120
+ if (opts.validate) {
121
+ let stale = false;
122
+ for (const [filePath, content] of generated) {
123
+ if (!existsSync(filePath)) {
124
+ console.error(`MISSING: ${relative(process.cwd(), filePath)}`);
125
+ stale = true;
126
+ }
127
+ else {
128
+ const existing = readFileSync(filePath, 'utf-8');
129
+ if (existing !== content) {
130
+ console.error(`STALE: ${relative(process.cwd(), filePath)}`);
131
+ stale = true;
132
+ }
133
+ }
134
+ }
135
+ if (stale) {
136
+ console.error('\nAPI reference is out of date. Run `refrakt extract` to regenerate.');
137
+ process.exit(1);
138
+ }
139
+ else {
140
+ console.log(`OK: ${generated.size} files up to date (${allSymbols.length} symbols)`);
141
+ }
142
+ return;
143
+ }
144
+ // Write mode
145
+ if (!existsSync(outputPath)) {
146
+ mkdirSync(outputPath, { recursive: true });
147
+ }
148
+ let written = 0;
149
+ for (const [filePath, content] of generated) {
150
+ const dir = dirname(filePath);
151
+ if (!existsSync(dir))
152
+ mkdirSync(dir, { recursive: true });
153
+ writeFileSync(filePath, content);
154
+ written++;
155
+ }
156
+ console.log(`Written ${written} files to ${relative(process.cwd(), outputPath)}`);
157
+ }
158
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Rune } from '@refrakt-md/runes';
2
+ import type { ThemeConfig } from '@refrakt-md/transform';
3
+ /** Dependencies injected at runtime via dynamic imports */
4
+ export interface InspectDeps {
5
+ Markdoc: {
6
+ parse: (source: string) => any;
7
+ transform: (ast: any, config: any) => any;
8
+ };
9
+ runes: Record<string, Rune>;
10
+ tags: Record<string, any>;
11
+ nodes: Record<string, any>;
12
+ serializeTree: (tree: any) => unknown;
13
+ extractHeadings: (ast: any) => any[];
14
+ createTransform: (config: ThemeConfig) => (tree: any) => any;
15
+ renderToHtml: (node: any, options?: {
16
+ pretty?: boolean;
17
+ }) => string;
18
+ extractSelectors: (node: any, prefix: string) => string[];
19
+ baseConfig: ThemeConfig;
20
+ }
21
+ export interface InspectOptions {
22
+ runeName?: string;
23
+ list: boolean;
24
+ json: boolean;
25
+ audit: boolean;
26
+ all: boolean;
27
+ theme: string;
28
+ items: number;
29
+ cssDir?: string;
30
+ flags: Record<string, string>;
31
+ }
32
+ export declare function inspectCommand(options: InspectOptions, deps: InspectDeps): Promise<void>;
33
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAyBzD,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC;QAAC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,CAAC;IACvF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IACtC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;IACrC,eAAe,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,MAAM,CAAC;IACpE,gBAAgB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC1D,UAAU,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAsB,cAAc,CACnC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAyEf"}
@@ -0,0 +1,269 @@
1
+ import { getFixture } from '../lib/fixtures.js';
2
+ import { discoverVariants } from '../lib/variants.js';
3
+ import { parseCssFile, auditSelectors, collectAllSelectors, } from '../lib/css-audit.js';
4
+ import { resolveCssDir, readCssForBlock, readAllCss } from '../lib/css-resolve.js';
5
+ import { formatConfig, formatSelectors, formatInput, formatHtml, formatRuneList, buildJsonOutput, formatAuditResult, formatAuditSummary, buildAuditJson, heading, } from '../lib/format.js';
6
+ export async function inspectCommand(options, deps) {
7
+ const { runes, baseConfig, } = deps;
8
+ // --list mode: show all available runes
9
+ if (options.list) {
10
+ return listRunes(runes, options.json);
11
+ }
12
+ // Resolve theme config
13
+ const config = await resolveTheme(options.theme, baseConfig);
14
+ // --all --audit: full-theme audit
15
+ if (options.all && options.audit) {
16
+ return runFullAudit(config, runes, options, deps);
17
+ }
18
+ // --all without --audit: not supported yet
19
+ if (options.all) {
20
+ throw new Error('--all currently requires --audit. Use --list to see available runes.');
21
+ }
22
+ if (!options.runeName) {
23
+ throw new Error('Missing rune name. Use --list to see available runes.\n\nUsage: refrakt inspect <rune> [options]');
24
+ }
25
+ // Resolve the rune by name or alias
26
+ const rune = findRune(options.runeName, runes);
27
+ if (!rune) {
28
+ const available = Object.values(runes)
29
+ .map(r => ` ${r.name}${r.aliases.length > 0 ? ` (${r.aliases.join(', ')})` : ''}`)
30
+ .join('\n');
31
+ throw new Error(`Unknown rune "${options.runeName}"\n\nAvailable runes:\n${available}`);
32
+ }
33
+ // --audit mode for a single rune
34
+ if (options.audit) {
35
+ return runSingleAudit(rune, config, options, deps);
36
+ }
37
+ // Check for variant expansion (e.g., --type=all)
38
+ const schemaVariants = discoverVariants(rune.schema);
39
+ const expandAttr = findExpandAttr(options.flags, schemaVariants);
40
+ if (expandAttr) {
41
+ // Expand all variants for this attribute
42
+ const values = schemaVariants[expandAttr];
43
+ if (options.json) {
44
+ const results = [];
45
+ for (const value of values) {
46
+ const overrides = { ...options.flags, [expandAttr]: value };
47
+ results.push(inspectSingle(rune, config, overrides, deps));
48
+ }
49
+ console.log(JSON.stringify(results, null, 2));
50
+ }
51
+ else {
52
+ for (const value of values) {
53
+ console.log(heading(`Variant: ${expandAttr}=${value}`));
54
+ const overrides = { ...options.flags, [expandAttr]: value };
55
+ outputFormatted(rune, config, overrides, deps);
56
+ console.log('');
57
+ }
58
+ }
59
+ }
60
+ else {
61
+ // Single variant
62
+ if (options.json) {
63
+ const result = inspectSingle(rune, config, options.flags, deps);
64
+ console.log(JSON.stringify(result, null, 2));
65
+ }
66
+ else {
67
+ outputFormatted(rune, config, options.flags, deps);
68
+ }
69
+ }
70
+ }
71
+ /** Run audit for a single rune */
72
+ function runSingleAudit(rune, config, options, deps) {
73
+ const cssDir = resolveCssDir(options.cssDir);
74
+ if (!cssDir) {
75
+ throw new Error('No CSS directory found. Use --css <dir> to specify the path to rune CSS files.');
76
+ }
77
+ const runeTypeof = rune.type?.name;
78
+ const runeConfig = runeTypeof ? config.runes[runeTypeof] : undefined;
79
+ if (!runeConfig) {
80
+ throw new Error(`No engine config found for rune "${rune.name}". It may be a component-only rune without identity transform config.`);
81
+ }
82
+ // Read CSS for this block
83
+ const cssFile = readCssForBlock(cssDir, runeConfig.block);
84
+ const cssMatches = cssFile
85
+ ? parseCssFile(cssFile.content, cssFile.path)
86
+ : [];
87
+ // Collect all possible selectors across variants
88
+ const schemaVariants = discoverVariants(rune.schema);
89
+ const allSelectors = collectAllSelectors(rune.name, runeConfig.block, config.prefix, schemaVariants, runeConfig.contextModifiers, runeConfig.staticModifiers, (flags) => {
90
+ const { tree } = runPipeline(rune, config, flags, deps);
91
+ return deps.extractSelectors(tree, config.prefix);
92
+ });
93
+ const result = auditSelectors(rune.name, allSelectors, cssMatches);
94
+ if (options.json) {
95
+ console.log(JSON.stringify(buildAuditJson([result], options.theme), null, 2));
96
+ }
97
+ else {
98
+ console.log(formatAuditResult(result, options.theme));
99
+ }
100
+ }
101
+ /** Run audit for all runes in the theme */
102
+ function runFullAudit(config, runes, options, deps) {
103
+ const cssDir = resolveCssDir(options.cssDir);
104
+ if (!cssDir) {
105
+ throw new Error('No CSS directory found. Use --css <dir> to specify the path to rune CSS files.');
106
+ }
107
+ // Parse all CSS files upfront
108
+ const cssFiles = readAllCss(cssDir);
109
+ const allCssMatches = [];
110
+ for (const file of cssFiles) {
111
+ allCssMatches.push(...parseCssFile(file.content, file.path));
112
+ }
113
+ const results = [];
114
+ // Iterate over all runes that have engine config
115
+ for (const rune of Object.values(runes)) {
116
+ const runeTypeof = rune.type?.name;
117
+ const runeConfig = runeTypeof ? config.runes[runeTypeof] : undefined;
118
+ if (!runeConfig)
119
+ continue; // Skip runes without identity transform config
120
+ const schemaVariants = discoverVariants(rune.schema);
121
+ let allSelectors;
122
+ try {
123
+ allSelectors = collectAllSelectors(rune.name, runeConfig.block, config.prefix, schemaVariants, runeConfig.contextModifiers, runeConfig.staticModifiers, (flags) => {
124
+ const { tree } = runPipeline(rune, config, flags, deps);
125
+ return deps.extractSelectors(tree, config.prefix);
126
+ });
127
+ }
128
+ catch {
129
+ // Skip runes whose fixtures fail to transform
130
+ continue;
131
+ }
132
+ // Filter CSS matches to only those relevant to this rune's block
133
+ const blockPrefix = `.${config.prefix}-${runeConfig.block}`;
134
+ const relevantCss = allCssMatches.filter(m => m.selector.startsWith(blockPrefix) || m.selector.startsWith('[data-'));
135
+ results.push(auditSelectors(rune.name, allSelectors, relevantCss));
136
+ }
137
+ // Sort results: complete first, then partial, then not-started, alphabetically within each group
138
+ results.sort((a, b) => {
139
+ const order = { 'complete': 0, 'partial': 1, 'not-started': 2 };
140
+ const statusDiff = order[a.status] - order[b.status];
141
+ if (statusDiff !== 0)
142
+ return statusDiff;
143
+ return a.rune.localeCompare(b.rune);
144
+ });
145
+ if (options.json) {
146
+ console.log(JSON.stringify(buildAuditJson(results, options.theme), null, 2));
147
+ }
148
+ else {
149
+ console.log(formatAuditSummary(results, options.theme));
150
+ }
151
+ }
152
+ /** Run the full pipeline for a single rune variant and return structured data */
153
+ function inspectSingle(rune, config, flags, deps) {
154
+ const { tree, source } = runPipeline(rune, config, flags, deps);
155
+ const html = deps.renderToHtml(tree, { pretty: true });
156
+ const selectors = deps.extractSelectors(tree, config.prefix);
157
+ const runeTypeof = rune.type?.name;
158
+ const runeConfig = runeTypeof ? config.runes[runeTypeof] : undefined;
159
+ return buildJsonOutput({
160
+ rune: rune.name,
161
+ theme: 'base',
162
+ input: source,
163
+ config: runeConfig,
164
+ html,
165
+ selectors,
166
+ });
167
+ }
168
+ /** Run the full pipeline and output formatted text */
169
+ function outputFormatted(rune, config, flags, deps) {
170
+ const { tree, source } = runPipeline(rune, config, flags, deps);
171
+ const html = deps.renderToHtml(tree, { pretty: true });
172
+ const selectors = deps.extractSelectors(tree, config.prefix);
173
+ const runeTypeof = rune.type?.name;
174
+ console.log(heading('Input'));
175
+ console.log(formatInput(source));
176
+ if (runeTypeof) {
177
+ console.log(heading('Config Applied'));
178
+ console.log(formatConfig(runeTypeof, config));
179
+ }
180
+ console.log(heading('Output HTML'));
181
+ console.log(formatHtml(html));
182
+ console.log(heading('Selectors'));
183
+ console.log(formatSelectors(selectors));
184
+ }
185
+ /** Run the Markdoc parse → transform → serialize → identity transform pipeline */
186
+ function runPipeline(rune, config, flags, deps) {
187
+ const source = getFixture(rune.name, flags);
188
+ const ast = deps.Markdoc.parse(source);
189
+ const headings = deps.extractHeadings(ast);
190
+ const transformed = deps.Markdoc.transform(ast, {
191
+ tags: deps.tags,
192
+ nodes: deps.nodes,
193
+ variables: {
194
+ generatedIds: new Set(),
195
+ path: '/inspect.md',
196
+ headings,
197
+ __source: source,
198
+ },
199
+ });
200
+ const serialized = deps.serializeTree(transformed);
201
+ const identityTransform = deps.createTransform(config);
202
+ const tree = identityTransform(serialized);
203
+ return { tree, source };
204
+ }
205
+ /** List all available runes */
206
+ function listRunes(runes, json) {
207
+ const list = Object.values(runes).map(rune => ({
208
+ name: rune.name,
209
+ aliases: rune.aliases,
210
+ description: rune.description,
211
+ variants: discoverVariants(rune.schema),
212
+ }));
213
+ if (json) {
214
+ console.log(JSON.stringify(list, null, 2));
215
+ }
216
+ else {
217
+ console.log(heading('Available Runes'));
218
+ console.log('');
219
+ console.log(formatRuneList(list));
220
+ }
221
+ }
222
+ /** Find a rune by name or alias */
223
+ function findRune(name, runes) {
224
+ // Direct match on rune key
225
+ if (runes[name])
226
+ return runes[name];
227
+ // Search by name or alias
228
+ for (const rune of Object.values(runes)) {
229
+ if (rune.name === name || rune.aliases.includes(name)) {
230
+ return rune;
231
+ }
232
+ }
233
+ return undefined;
234
+ }
235
+ /** Check if any flag has value "all" and corresponds to a known variant */
236
+ function findExpandAttr(flags, variants) {
237
+ for (const [key, value] of Object.entries(flags)) {
238
+ if (value === 'all' && variants[key]) {
239
+ return key;
240
+ }
241
+ }
242
+ return null;
243
+ }
244
+ /** Resolve a theme name to a ThemeConfig */
245
+ async function resolveTheme(theme, baseConfig) {
246
+ if (theme === 'base')
247
+ return baseConfig;
248
+ // Try dynamic import — works for package names (e.g., '@refrakt-md/lumina')
249
+ // and file paths (e.g., './src/config.ts')
250
+ const importPath = theme.startsWith('.') || theme.startsWith('/')
251
+ ? (await import('node:path')).resolve(theme)
252
+ : theme + '/transform';
253
+ try {
254
+ const mod = await import(importPath);
255
+ // Look for common export names
256
+ const config = mod.themeConfig ?? mod.config ?? mod.default;
257
+ if (config && typeof config === 'object' && config.runes && config.prefix) {
258
+ return config;
259
+ }
260
+ console.error(`Warning: "${importPath}" does not export a valid ThemeConfig, using base config.\n`);
261
+ return baseConfig;
262
+ }
263
+ catch (err) {
264
+ console.error(`Warning: Could not load theme "${theme}" (${importPath}): ${err.message}\n`);
265
+ console.error(`Falling back to base config.\n`);
266
+ return baseConfig;
267
+ }
268
+ }
269
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ScaffoldCssOptions {
2
+ outputDir: string;
3
+ force: boolean;
4
+ }
5
+ export declare function scaffoldCssCommand(opts: ScaffoldCssOptions): void;
6
+ //# sourceMappingURL=scaffold-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-css.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold-css.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CACf;AAYD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAyDjE"}