@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.
- package/dist/bin.js +499 -9
- package/dist/bin.js.map +1 -1
- package/dist/commands/contracts.d.ts +6 -0
- package/dist/commands/contracts.d.ts.map +1 -0
- package/dist/commands/contracts.js +41 -0
- package/dist/commands/contracts.js.map +1 -0
- package/dist/commands/edit.d.ts +8 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +100 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/extract.d.ts +10 -0
- package/dist/commands/extract.d.ts.map +1 -0
- package/dist/commands/extract.js +158 -0
- package/dist/commands/extract.js.map +1 -0
- package/dist/commands/inspect.d.ts +33 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +269 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/scaffold-css.d.ts +6 -0
- package/dist/commands/scaffold-css.d.ts.map +1 -0
- package/dist/commands/scaffold-css.js +113 -0
- package/dist/commands/scaffold-css.js.map +1 -0
- package/dist/commands/theme.d.ts +10 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +160 -0
- package/dist/commands/theme.js.map +1 -0
- package/dist/commands/validate.d.ts +6 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +70 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/write.d.ts +7 -0
- package/dist/commands/write.d.ts.map +1 -1
- package/dist/commands/write.js +66 -10
- package/dist/commands/write.js.map +1 -1
- package/dist/config-file.d.ts +15 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +47 -0
- package/dist/config-file.js.map +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -2
- package/dist/config.js.map +1 -1
- package/dist/extractors/index.d.ts +3 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +15 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/python.d.ts +6 -0
- package/dist/extractors/python.d.ts.map +1 -0
- package/dist/extractors/python.js +8 -0
- package/dist/extractors/python.js.map +1 -0
- package/dist/extractors/types.d.ts +55 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +2 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/extractors/typescript.d.ts +28 -0
- package/dist/extractors/typescript.d.ts.map +1 -0
- package/dist/extractors/typescript.js +566 -0
- package/dist/extractors/typescript.js.map +1 -0
- package/dist/lib/css-audit.d.ts +23 -0
- package/dist/lib/css-audit.d.ts.map +1 -0
- package/dist/lib/css-audit.js +99 -0
- package/dist/lib/css-audit.js.map +1 -0
- package/dist/lib/css-resolve.d.ts +20 -0
- package/dist/lib/css-resolve.d.ts.map +1 -0
- package/dist/lib/css-resolve.js +57 -0
- package/dist/lib/css-resolve.js.map +1 -0
- package/dist/lib/fixtures.d.ts +10 -0
- package/dist/lib/fixtures.d.ts.map +1 -0
- package/dist/lib/fixtures.js +356 -0
- package/dist/lib/fixtures.js.map +1 -0
- package/dist/lib/format.d.ts +35 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +215 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/layout-generator.d.ts +8 -0
- package/dist/lib/layout-generator.d.ts.map +1 -0
- package/dist/lib/layout-generator.js +22 -0
- package/dist/lib/layout-generator.js.map +1 -0
- package/dist/lib/symbol-generator.d.ts +14 -0
- package/dist/lib/symbol-generator.d.ts.map +1 -0
- package/dist/lib/symbol-generator.js +202 -0
- package/dist/lib/symbol-generator.js.map +1 -0
- package/dist/lib/variants.d.ts +17 -0
- package/dist/lib/variants.d.ts.map +1 -0
- package/dist/lib/variants.js +32 -0
- package/dist/lib/variants.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAWpE,SAAS,cAAc,CAAC,SAAiB;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/B,kCAAkC;IAClC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/C,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,YAAY,CAAC;QACrE,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC1C,CAAC;IAED,0BAA0B;IAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,2BAA2B;IAC3B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAAE,OAAO,YAAY,CAAC;YAClF,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAAE,OAAO,QAAQ,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACR,eAAe;QAChB,CAAC;IACF,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,IAA6B;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,OAAO,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,GAAW;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAoB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,kFAAkF;IAClF,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEzF,iCAAiC;IACjC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAE3E,wBAAwB;IACxB,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,0BAA0B,SAAS,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,iCAAiC;IACjC,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,MAAM,eAAe,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEjF,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;YAChD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACP,uCAAuC;YACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC;gBACtD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;IACF,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEzC,+CAA+C;IAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/D,KAAK,GAAG,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACP,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBAC1B,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC7D,KAAK,GAAG,IAAI,CAAC;gBACd,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,IAAI,sBAAsB,UAAU,CAAC,MAAM,WAAW,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;IACR,CAAC;IAED,aAAa;IACb,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,aAAa,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -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 @@
|
|
|
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"}
|