@refrakt-md/cli 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +277 -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/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/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.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/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/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 +7 -3
package/dist/config.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { AIProvider } from '@refrakt-md/ai';
|
|
2
|
-
export type ProviderName = 'anthropic' | 'ollama';
|
|
2
|
+
export type ProviderName = 'anthropic' | 'gemini' | 'ollama';
|
|
3
3
|
export interface ResolvedProvider {
|
|
4
4
|
provider: AIProvider;
|
|
5
5
|
name: ProviderName;
|
|
6
|
+
defaultModel: string;
|
|
6
7
|
}
|
|
7
8
|
export declare function detectProvider(explicit?: string): ResolvedProvider;
|
|
8
9
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,UAAU,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACrB;AAQD,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA6BlE"}
|
package/dist/config.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { createAnthropicProvider, createOllamaProvider } from '@refrakt-md/ai';
|
|
1
|
+
import { createAnthropicProvider, createGeminiProvider, createOllamaProvider } from '@refrakt-md/ai';
|
|
2
|
+
const DEFAULT_MODELS = {
|
|
3
|
+
anthropic: 'claude-sonnet-4-5-20250929',
|
|
4
|
+
gemini: 'gemini-2.0-flash',
|
|
5
|
+
ollama: 'llama3.2',
|
|
6
|
+
};
|
|
2
7
|
export function detectProvider(explicit) {
|
|
3
8
|
if (explicit) {
|
|
4
9
|
return createProviderByName(explicit);
|
|
@@ -7,12 +12,22 @@ export function detectProvider(explicit) {
|
|
|
7
12
|
if (anthropicKey) {
|
|
8
13
|
return {
|
|
9
14
|
name: 'anthropic',
|
|
15
|
+
defaultModel: DEFAULT_MODELS.anthropic,
|
|
10
16
|
provider: createAnthropicProvider({ apiKey: anthropicKey }),
|
|
11
17
|
};
|
|
12
18
|
}
|
|
19
|
+
const googleKey = process.env.GOOGLE_API_KEY;
|
|
20
|
+
if (googleKey) {
|
|
21
|
+
return {
|
|
22
|
+
name: 'gemini',
|
|
23
|
+
defaultModel: DEFAULT_MODELS.gemini,
|
|
24
|
+
provider: createGeminiProvider({ apiKey: googleKey }),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
13
27
|
const ollamaHost = process.env.OLLAMA_HOST;
|
|
14
28
|
return {
|
|
15
29
|
name: 'ollama',
|
|
30
|
+
defaultModel: DEFAULT_MODELS.ollama,
|
|
16
31
|
provider: createOllamaProvider(ollamaHost ? { host: ollamaHost } : undefined),
|
|
17
32
|
};
|
|
18
33
|
}
|
|
@@ -25,18 +40,31 @@ function createProviderByName(name) {
|
|
|
25
40
|
}
|
|
26
41
|
return {
|
|
27
42
|
name: 'anthropic',
|
|
43
|
+
defaultModel: DEFAULT_MODELS.anthropic,
|
|
28
44
|
provider: createAnthropicProvider({ apiKey }),
|
|
29
45
|
};
|
|
30
46
|
}
|
|
47
|
+
case 'gemini': {
|
|
48
|
+
const apiKey = process.env.GOOGLE_API_KEY;
|
|
49
|
+
if (!apiKey) {
|
|
50
|
+
throw new Error('GOOGLE_API_KEY environment variable is required for the Gemini provider');
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
name: 'gemini',
|
|
54
|
+
defaultModel: DEFAULT_MODELS.gemini,
|
|
55
|
+
provider: createGeminiProvider({ apiKey }),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
31
58
|
case 'ollama': {
|
|
32
59
|
const host = process.env.OLLAMA_HOST;
|
|
33
60
|
return {
|
|
34
61
|
name: 'ollama',
|
|
62
|
+
defaultModel: DEFAULT_MODELS.ollama,
|
|
35
63
|
provider: createOllamaProvider(host ? { host } : undefined),
|
|
36
64
|
};
|
|
37
65
|
}
|
|
38
66
|
default:
|
|
39
|
-
throw new Error(`Unknown provider "${name}". Available: anthropic, ollama`);
|
|
67
|
+
throw new Error(`Unknown provider "${name}". Available: anthropic, gemini, ollama`);
|
|
40
68
|
}
|
|
41
69
|
}
|
|
42
70
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAUrG,MAAM,cAAc,GAAiC;IACpD,SAAS,EAAE,4BAA4B;IACvC,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,UAAU;CAClB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,oBAAoB,CAAC,QAAwB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACnD,IAAI,YAAY,EAAE,CAAC;QAClB,OAAO;YACN,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,cAAc,CAAC,SAAS;YACtC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;SAC3D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACf,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,cAAc,CAAC,MAAM;YACnC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SACrD,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAC3C,OAAO;QACN,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,cAAc,CAAC,MAAM;QACnC,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC7E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACd,+EAA+E,CAC/E,CAAC;YACH,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,cAAc,CAAC,SAAS;gBACtC,QAAQ,EAAE,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC7C,CAAC;QACH,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACd,yEAAyE,CACzE,CAAC;YACH,CAAC;YACD,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,cAAc,CAAC,MAAM;gBACnC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;aAC1C,CAAC;QACH,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YACrC,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,cAAc,CAAC,MAAM;gBACnC,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;aAC3D,CAAC;QACH,CAAC;QACD;YACC,MAAM,IAAI,KAAK,CACd,qBAAqB,IAAI,yCAAyC,CAClE,CAAC;IACJ,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface CssSelectorMatch {
|
|
2
|
+
selector: string;
|
|
3
|
+
file: string;
|
|
4
|
+
line: number;
|
|
5
|
+
}
|
|
6
|
+
export interface AuditResult {
|
|
7
|
+
rune: string;
|
|
8
|
+
total: number;
|
|
9
|
+
styled: number;
|
|
10
|
+
status: 'complete' | 'partial' | 'not-started';
|
|
11
|
+
selectors: Record<string, {
|
|
12
|
+
styled: boolean;
|
|
13
|
+
file?: string;
|
|
14
|
+
line?: number;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/** Parse a CSS file and extract all .rf-* class selectors and [data-*] attribute selectors */
|
|
18
|
+
export declare function parseCssFile(content: string, filePath: string): CssSelectorMatch[];
|
|
19
|
+
/** Match generated selectors against CSS selectors and produce an audit result */
|
|
20
|
+
export declare function auditSelectors(rune: string, generated: string[], cssMatches: CssSelectorMatch[]): AuditResult;
|
|
21
|
+
/** Collect all possible selectors for a rune by running all modifier variants */
|
|
22
|
+
export declare function collectAllSelectors(runeName: string, block: string, prefix: string, schemaVariants: Record<string, string[]>, contextModifiers: Record<string, string> | undefined, staticModifiers: string[] | undefined, runVariant: (flags: Record<string, string>) => string[]): string[];
|
|
23
|
+
//# sourceMappingURL=css-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-audit.d.ts","sourceRoot":"","sources":["../../src/lib/css-audit.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E;AAKD,8FAA8F;AAC9F,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAqBlF;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,EAAE,gBAAgB,EAAE,GAC5B,WAAW,CA0Bb;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACxC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACpD,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,EACrC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,GACrD,MAAM,EAAE,CAmCV"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import postcss from 'postcss';
|
|
2
|
+
const RF_CLASS_RE = /\.rf-[\w-]+/g;
|
|
3
|
+
const DATA_ATTR_RE = /\[data-[\w-]+(?:="[^"]*")?\]/g;
|
|
4
|
+
/** Parse a CSS file and extract all .rf-* class selectors and [data-*] attribute selectors */
|
|
5
|
+
export function parseCssFile(content, filePath) {
|
|
6
|
+
const matches = [];
|
|
7
|
+
const fileName = filePath.split('/').pop() ?? filePath;
|
|
8
|
+
const root = postcss.parse(content, { from: filePath });
|
|
9
|
+
root.walkRules((rule) => {
|
|
10
|
+
const line = rule.source?.start?.line ?? 0;
|
|
11
|
+
// Extract .rf-* class selectors
|
|
12
|
+
for (const m of rule.selector.matchAll(RF_CLASS_RE)) {
|
|
13
|
+
matches.push({ selector: m[0], file: fileName, line });
|
|
14
|
+
}
|
|
15
|
+
// Extract [data-*] attribute selectors
|
|
16
|
+
for (const m of rule.selector.matchAll(DATA_ATTR_RE)) {
|
|
17
|
+
matches.push({ selector: m[0], file: fileName, line });
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return matches;
|
|
21
|
+
}
|
|
22
|
+
/** Match generated selectors against CSS selectors and produce an audit result */
|
|
23
|
+
export function auditSelectors(rune, generated, cssMatches) {
|
|
24
|
+
// Build a lookup: selector → first CSS match
|
|
25
|
+
const cssLookup = new Map();
|
|
26
|
+
for (const match of cssMatches) {
|
|
27
|
+
if (!cssLookup.has(match.selector)) {
|
|
28
|
+
cssLookup.set(match.selector, { file: match.file, line: match.line });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const selectors = {};
|
|
32
|
+
let styled = 0;
|
|
33
|
+
for (const sel of generated) {
|
|
34
|
+
const match = cssLookup.get(sel);
|
|
35
|
+
if (match) {
|
|
36
|
+
selectors[sel] = { styled: true, file: match.file, line: match.line };
|
|
37
|
+
styled++;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
selectors[sel] = { styled: false };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const total = generated.length;
|
|
44
|
+
const status = styled === 0 ? 'not-started' : styled === total ? 'complete' : 'partial';
|
|
45
|
+
return { rune, total, styled, status, selectors };
|
|
46
|
+
}
|
|
47
|
+
/** Collect all possible selectors for a rune by running all modifier variants */
|
|
48
|
+
export function collectAllSelectors(runeName, block, prefix, schemaVariants, contextModifiers, staticModifiers, runVariant) {
|
|
49
|
+
const allSelectors = new Set();
|
|
50
|
+
// If the rune has variant modifiers, run each combination
|
|
51
|
+
const variantKeys = Object.keys(schemaVariants);
|
|
52
|
+
if (variantKeys.length > 0) {
|
|
53
|
+
// Run each variant value for the first attribute with variants
|
|
54
|
+
// (most runes have a single modifier attribute)
|
|
55
|
+
for (const [attr, values] of Object.entries(schemaVariants)) {
|
|
56
|
+
for (const value of values) {
|
|
57
|
+
const selectors = runVariant({ [attr]: value });
|
|
58
|
+
for (const s of selectors)
|
|
59
|
+
allSelectors.add(s);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// No variants — run with empty flags
|
|
65
|
+
const selectors = runVariant({});
|
|
66
|
+
for (const s of selectors)
|
|
67
|
+
allSelectors.add(s);
|
|
68
|
+
}
|
|
69
|
+
// Add synthetic context modifier selectors
|
|
70
|
+
if (contextModifiers) {
|
|
71
|
+
for (const suffix of Object.values(contextModifiers)) {
|
|
72
|
+
allSelectors.add(`.${prefix}-${block}--${suffix}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Add synthetic static modifier selectors
|
|
76
|
+
if (staticModifiers) {
|
|
77
|
+
for (const suffix of staticModifiers) {
|
|
78
|
+
allSelectors.add(`.${prefix}-${block}--${suffix}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return [...allSelectors].sort(selectorSort);
|
|
82
|
+
}
|
|
83
|
+
function selectorSort(a, b) {
|
|
84
|
+
const typeA = selectorType(a);
|
|
85
|
+
const typeB = selectorType(b);
|
|
86
|
+
if (typeA !== typeB)
|
|
87
|
+
return typeA - typeB;
|
|
88
|
+
return a.localeCompare(b);
|
|
89
|
+
}
|
|
90
|
+
function selectorType(s) {
|
|
91
|
+
if (s.startsWith('['))
|
|
92
|
+
return 3;
|
|
93
|
+
if (s.includes('__'))
|
|
94
|
+
return 2;
|
|
95
|
+
if (s.includes('--'))
|
|
96
|
+
return 1;
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=css-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-audit.js","sourceRoot":"","sources":["../../src/lib/css-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the CSS directory for rune styles.
|
|
3
|
+
*
|
|
4
|
+
* Discovery order:
|
|
5
|
+
* 1. Explicit --css flag
|
|
6
|
+
* 2. Resolve @refrakt-md/lumina package → styles/runes/
|
|
7
|
+
* 3. Monorepo fallback: packages/lumina/styles/runes/
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveCssDir(explicitDir?: string): string | null;
|
|
10
|
+
/** Read a single CSS file for a BEM block name (e.g., "hint" → hint.css) */
|
|
11
|
+
export declare function readCssForBlock(cssDir: string, block: string): {
|
|
12
|
+
content: string;
|
|
13
|
+
path: string;
|
|
14
|
+
} | null;
|
|
15
|
+
/** Read all CSS files from the directory */
|
|
16
|
+
export declare function readAllCss(cssDir: string): Array<{
|
|
17
|
+
content: string;
|
|
18
|
+
path: string;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=css-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-resolve.d.ts","sourceRoot":"","sources":["../../src/lib/css-resolve.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BjE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIvG;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CASnF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join, resolve, dirname } from 'node:path';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the CSS directory for rune styles.
|
|
6
|
+
*
|
|
7
|
+
* Discovery order:
|
|
8
|
+
* 1. Explicit --css flag
|
|
9
|
+
* 2. Resolve @refrakt-md/lumina package → styles/runes/
|
|
10
|
+
* 3. Monorepo fallback: packages/lumina/styles/runes/
|
|
11
|
+
*/
|
|
12
|
+
export function resolveCssDir(explicitDir) {
|
|
13
|
+
if (explicitDir) {
|
|
14
|
+
const abs = resolve(explicitDir);
|
|
15
|
+
if (!existsSync(abs)) {
|
|
16
|
+
throw new Error(`CSS directory not found: ${abs}`);
|
|
17
|
+
}
|
|
18
|
+
return abs;
|
|
19
|
+
}
|
|
20
|
+
// Try resolving from @refrakt-md/lumina package
|
|
21
|
+
try {
|
|
22
|
+
const require = createRequire(import.meta.url);
|
|
23
|
+
const luminaPkg = require.resolve('@refrakt-md/lumina/package.json');
|
|
24
|
+
const luminaDir = dirname(luminaPkg);
|
|
25
|
+
const runesDir = join(luminaDir, 'styles', 'runes');
|
|
26
|
+
if (existsSync(runesDir)) {
|
|
27
|
+
return runesDir;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Package not found, try monorepo fallback
|
|
32
|
+
}
|
|
33
|
+
// Monorepo fallback
|
|
34
|
+
const monoRepo = resolve('packages/lumina/styles/runes');
|
|
35
|
+
if (existsSync(monoRepo)) {
|
|
36
|
+
return monoRepo;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/** Read a single CSS file for a BEM block name (e.g., "hint" → hint.css) */
|
|
41
|
+
export function readCssForBlock(cssDir, block) {
|
|
42
|
+
const filePath = join(cssDir, `${block}.css`);
|
|
43
|
+
if (!existsSync(filePath))
|
|
44
|
+
return null;
|
|
45
|
+
return { content: readFileSync(filePath, 'utf-8'), path: filePath };
|
|
46
|
+
}
|
|
47
|
+
/** Read all CSS files from the directory */
|
|
48
|
+
export function readAllCss(cssDir) {
|
|
49
|
+
const files = readdirSync(cssDir)
|
|
50
|
+
.filter(f => f.endsWith('.css'))
|
|
51
|
+
.sort();
|
|
52
|
+
return files.map(f => {
|
|
53
|
+
const filePath = join(cssDir, f);
|
|
54
|
+
return { content: readFileSync(filePath, 'utf-8'), path: filePath };
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=css-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-resolve.js","sourceRoot":"","sources":["../../src/lib/css-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,WAAoB;IACjD,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC;QACjB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,2CAA2C;IAC5C,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,KAAa;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC/B,IAAI,EAAE,CAAC;IAET,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Markdoc fixture strings for the inspect command.
|
|
3
|
+
*
|
|
4
|
+
* Each fixture exercises the rune's full structure with realistic content.
|
|
5
|
+
* The key is the primary rune tag name (as used in Markdoc).
|
|
6
|
+
*/
|
|
7
|
+
export declare const fixtures: Record<string, string>;
|
|
8
|
+
/** Get a fixture for a rune, with optional attribute overrides applied to the source */
|
|
9
|
+
export declare function getFixture(runeName: string, attrOverrides?: Record<string, string>): string;
|
|
10
|
+
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/lib/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmV3C,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAc3F"}
|