kern-lang 1.0.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 (67) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +304 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +244 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/config.d.ts +46 -0
  7. package/dist/config.js +54 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/context-export.d.ts +11 -0
  10. package/dist/context-export.js +121 -0
  11. package/dist/context-export.js.map +1 -0
  12. package/dist/decompiler.d.ts +2 -0
  13. package/dist/decompiler.js +44 -0
  14. package/dist/decompiler.js.map +1 -0
  15. package/dist/draft-protocol.d.ts +27 -0
  16. package/dist/draft-protocol.js +135 -0
  17. package/dist/draft-protocol.js.map +1 -0
  18. package/dist/errors.d.ts +12 -0
  19. package/dist/errors.js +40 -0
  20. package/dist/errors.js.map +1 -0
  21. package/dist/index.d.ts +28 -0
  22. package/dist/index.js +33 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/metrics.d.ts +30 -0
  25. package/dist/metrics.js +182 -0
  26. package/dist/metrics.js.map +1 -0
  27. package/dist/parser.d.ts +4 -0
  28. package/dist/parser.js +361 -0
  29. package/dist/parser.js.map +1 -0
  30. package/dist/spec.d.ts +17 -0
  31. package/dist/spec.js +86 -0
  32. package/dist/spec.js.map +1 -0
  33. package/dist/styles-react.d.ts +3 -0
  34. package/dist/styles-react.js +20 -0
  35. package/dist/styles-react.js.map +1 -0
  36. package/dist/styles-tailwind.d.ts +8 -0
  37. package/dist/styles-tailwind.js +197 -0
  38. package/dist/styles-tailwind.js.map +1 -0
  39. package/dist/transpiler-cli.d.ts +3 -0
  40. package/dist/transpiler-cli.js +279 -0
  41. package/dist/transpiler-cli.js.map +1 -0
  42. package/dist/transpiler-express.d.ts +3 -0
  43. package/dist/transpiler-express.js +612 -0
  44. package/dist/transpiler-express.js.map +1 -0
  45. package/dist/transpiler-nextjs.d.ts +21 -0
  46. package/dist/transpiler-nextjs.js +400 -0
  47. package/dist/transpiler-nextjs.js.map +1 -0
  48. package/dist/transpiler-tailwind.d.ts +3 -0
  49. package/dist/transpiler-tailwind.js +594 -0
  50. package/dist/transpiler-tailwind.js.map +1 -0
  51. package/dist/transpiler-terminal.d.ts +3 -0
  52. package/dist/transpiler-terminal.js +522 -0
  53. package/dist/transpiler-terminal.js.map +1 -0
  54. package/dist/transpiler-web.d.ts +3 -0
  55. package/dist/transpiler-web.js +218 -0
  56. package/dist/transpiler-web.js.map +1 -0
  57. package/dist/transpiler.d.ts +3 -0
  58. package/dist/transpiler.js +218 -0
  59. package/dist/transpiler.js.map +1 -0
  60. package/dist/types.d.ts +76 -0
  61. package/dist/types.js +11 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/utils.d.ts +5 -0
  64. package/dist/utils.js +36 -0
  65. package/dist/utils.js.map +1 -0
  66. package/kern.config.ts +61 -0
  67. package/package.json +64 -0
@@ -0,0 +1,182 @@
1
+ import { STYLE_SHORTHANDS } from './spec.js';
2
+ // ── Mapped CSS properties (mirrors the switch cases in stylesToTailwind) ─
3
+ const MAPPED_CSS_PROPERTIES = new Set([
4
+ 'padding', 'paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight',
5
+ 'margin', 'marginTop', 'marginBottom', 'marginLeft', 'marginRight',
6
+ 'backgroundColor', 'color', 'fontSize', 'fontWeight', 'borderRadius',
7
+ 'width', 'height', 'justifyContent', 'alignItems', 'flexDirection',
8
+ 'flex', 'gap', 'borderColor', 'borderWidth', 'overflow',
9
+ 'textAlign', 'elevation', 'opacity', 'position', 'display', 'zIndex',
10
+ ]);
11
+ // ── Handled node types (mirrors renderNode switch in transpiler-tailwind) ─
12
+ const HANDLED_NODE_TYPES = new Set([
13
+ 'state', 'logic', 'screen', 'section', 'card', 'row', 'col', 'text',
14
+ 'divider', 'button', 'slider', 'toggle', 'grid', 'conditional',
15
+ 'component', 'icon', 'image', 'list', 'item', 'tabs', 'tab',
16
+ 'progress', 'input', 'theme',
17
+ // CLI
18
+ 'cli', 'command', 'arg', 'flag', 'import',
19
+ // Streaming/process
20
+ 'stream', 'spawn', 'timer', 'on', 'env',
21
+ // Terminal
22
+ 'separator', 'table', 'scoreboard', 'metric',
23
+ 'spinner', 'progress', 'box', 'gradient',
24
+ 'repl', 'guard', 'parallel', 'dispatch', 'then', 'each',
25
+ ]);
26
+ // ── Escape detection ─────────────────────────────────────────────────────
27
+ export function isEscapedStyleKey(rawKey) {
28
+ const expanded = STYLE_SHORTHANDS[rawKey] || rawKey;
29
+ return !MAPPED_CSS_PROPERTIES.has(expanded);
30
+ }
31
+ function walkNode(node, acc) {
32
+ acc.nodeCount++;
33
+ if (!HANDLED_NODE_TYPES.has(node.type)) {
34
+ acc.unknownNodeCount++;
35
+ }
36
+ const props = node.props || {};
37
+ const styles = props.styles || {};
38
+ const styleCount = Object.keys(styles).length;
39
+ // Count node types
40
+ const entry = acc.nodeTypeCounts.get(node.type);
41
+ if (entry) {
42
+ entry.count++;
43
+ entry.styleDecls += styleCount;
44
+ }
45
+ else {
46
+ acc.nodeTypeCounts.set(node.type, { count: 1, styleDecls: styleCount });
47
+ }
48
+ // Classify style declarations
49
+ for (const rawKey of Object.keys(styles)) {
50
+ acc.totalStyleDecls++;
51
+ acc.totalRawKeys++;
52
+ if (rawKey in STYLE_SHORTHANDS) {
53
+ acc.shorthandHits++;
54
+ }
55
+ const expanded = STYLE_SHORTHANDS[rawKey] || rawKey;
56
+ if (MAPPED_CSS_PROPERTIES.has(expanded)) {
57
+ acc.mappedStyleDecls++;
58
+ }
59
+ else {
60
+ acc.escapedStyleDecls++;
61
+ acc.escapedKeys.add(expanded);
62
+ }
63
+ }
64
+ // Count theme refs
65
+ const themeRefs = props.themeRefs || [];
66
+ acc.themeRefCount += themeRefs.length;
67
+ // Count pseudo-style declarations
68
+ const pseudoStyles = props.pseudoStyles || {};
69
+ for (const stateStyles of Object.values(pseudoStyles)) {
70
+ acc.pseudoStyleCount += Object.keys(stateStyles).length;
71
+ }
72
+ // Recurse children
73
+ if (node.children) {
74
+ for (const child of node.children) {
75
+ walkNode(child, acc);
76
+ }
77
+ }
78
+ }
79
+ // ── Main export ──────────────────────────────────────────────────────────
80
+ export function collectLanguageMetrics(root, result) {
81
+ const acc = {
82
+ nodeCount: 0,
83
+ unknownNodeCount: 0,
84
+ nodeTypeCounts: new Map(),
85
+ totalStyleDecls: 0,
86
+ mappedStyleDecls: 0,
87
+ escapedStyleDecls: 0,
88
+ escapedKeys: new Set(),
89
+ shorthandHits: 0,
90
+ totalRawKeys: 0,
91
+ themeRefCount: 0,
92
+ pseudoStyleCount: 0,
93
+ };
94
+ walkNode(root, acc);
95
+ const nodeTypes = [...acc.nodeTypeCounts.entries()]
96
+ .map(([type, data]) => ({ type, count: data.count, styleDecls: data.styleDecls }))
97
+ .sort((a, b) => b.count - a.count);
98
+ return {
99
+ nodeCount: acc.nodeCount,
100
+ unknownNodeCount: acc.unknownNodeCount,
101
+ nodeTypes,
102
+ styleMetrics: {
103
+ totalStyleDecls: acc.totalStyleDecls,
104
+ mappedStyleDecls: acc.mappedStyleDecls,
105
+ escapedStyleDecls: acc.escapedStyleDecls,
106
+ escapeRatio: acc.totalStyleDecls > 0 ? acc.escapedStyleDecls / acc.totalStyleDecls : 0,
107
+ escapedKeys: [...acc.escapedKeys].sort(),
108
+ },
109
+ shorthandCoverage: acc.totalRawKeys > 0 ? acc.shorthandHits / acc.totalRawKeys : 0,
110
+ themeRefCount: acc.themeRefCount,
111
+ pseudoStyleCount: acc.pseudoStyleCount,
112
+ tokenEfficiency: result ? {
113
+ irTokenCount: result.irTokenCount,
114
+ tsTokenCount: result.tsTokenCount,
115
+ tokenReduction: result.tokenReduction,
116
+ } : null,
117
+ };
118
+ }
119
+ // ── Merge utility (for aggregating across multiple files) ────────────────
120
+ export function mergeMetrics(metrics) {
121
+ if (metrics.length === 0) {
122
+ return collectLanguageMetrics({ type: 'empty' });
123
+ }
124
+ if (metrics.length === 1)
125
+ return metrics[0];
126
+ let nodeCount = 0;
127
+ let unknownNodeCount = 0;
128
+ let totalStyleDecls = 0;
129
+ let mappedStyleDecls = 0;
130
+ let escapedStyleDecls = 0;
131
+ const escapedKeys = new Set();
132
+ let shorthandHitsSum = 0;
133
+ let totalRawKeysSum = 0;
134
+ let themeRefCount = 0;
135
+ let pseudoStyleCount = 0;
136
+ const nodeTypeMerge = new Map();
137
+ for (const m of metrics) {
138
+ nodeCount += m.nodeCount;
139
+ unknownNodeCount += m.unknownNodeCount;
140
+ totalStyleDecls += m.styleMetrics.totalStyleDecls;
141
+ mappedStyleDecls += m.styleMetrics.mappedStyleDecls;
142
+ escapedStyleDecls += m.styleMetrics.escapedStyleDecls;
143
+ for (const k of m.styleMetrics.escapedKeys)
144
+ escapedKeys.add(k);
145
+ themeRefCount += m.themeRefCount;
146
+ pseudoStyleCount += m.pseudoStyleCount;
147
+ // Approximate shorthand coverage from stored ratio
148
+ const rawKeys = m.styleMetrics.totalStyleDecls;
149
+ shorthandHitsSum += Math.round(m.shorthandCoverage * rawKeys);
150
+ totalRawKeysSum += rawKeys;
151
+ for (const nt of m.nodeTypes) {
152
+ const existing = nodeTypeMerge.get(nt.type);
153
+ if (existing) {
154
+ existing.count += nt.count;
155
+ existing.styleDecls += nt.styleDecls;
156
+ }
157
+ else {
158
+ nodeTypeMerge.set(nt.type, { count: nt.count, styleDecls: nt.styleDecls });
159
+ }
160
+ }
161
+ }
162
+ const nodeTypes = [...nodeTypeMerge.entries()]
163
+ .map(([type, data]) => ({ type, count: data.count, styleDecls: data.styleDecls }))
164
+ .sort((a, b) => b.count - a.count);
165
+ return {
166
+ nodeCount,
167
+ unknownNodeCount,
168
+ nodeTypes,
169
+ styleMetrics: {
170
+ totalStyleDecls,
171
+ mappedStyleDecls,
172
+ escapedStyleDecls,
173
+ escapeRatio: totalStyleDecls > 0 ? escapedStyleDecls / totalStyleDecls : 0,
174
+ escapedKeys: [...escapedKeys].sort(),
175
+ },
176
+ shorthandCoverage: totalRawKeysSum > 0 ? shorthandHitsSum / totalRawKeysSum : 0,
177
+ themeRefCount,
178
+ pseudoStyleCount,
179
+ tokenEfficiency: null,
180
+ };
181
+ }
182
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { IRNode } from './types.js';
2
+ /** Get warnings from the last parse() call */
3
+ export declare function getParseWarnings(): string[];
4
+ export declare function parse(source: string): IRNode;
package/dist/parser.js ADDED
@@ -0,0 +1,361 @@
1
+ let _parseWarnings = [];
2
+ const MULTILINE_BLOCK_TYPES = new Set(['logic', 'handler']);
3
+ function parseLine(raw, lineNum) {
4
+ if (raw.trim() === '')
5
+ return null;
6
+ const indent = raw.search(/\S/);
7
+ let rest = raw.slice(indent);
8
+ const col = indent + 1;
9
+ // Extract type
10
+ const typeMatch = rest.match(/^([A-Za-z_][A-Za-z0-9_-]*)/);
11
+ if (!typeMatch)
12
+ return null;
13
+ const type = typeMatch[1];
14
+ rest = rest.slice(type.length);
15
+ const props = {};
16
+ const styles = {};
17
+ const pseudoStyles = {};
18
+ const themeRefs = [];
19
+ // Special: theme nodes have a bare name after the type: "theme bar {h:8}"
20
+ if (type === 'theme') {
21
+ rest = rest.replace(/^ +/, '');
22
+ const nameMatch = rest.match(/^([A-Za-z_][A-Za-z0-9_-]*)/);
23
+ if (nameMatch) {
24
+ props.name = nameMatch[1];
25
+ rest = rest.slice(nameMatch[0].length);
26
+ }
27
+ }
28
+ // Parse the remainder: props, style blocks, theme refs
29
+ while (rest.length > 0) {
30
+ rest = rest.replace(/^ +/, '');
31
+ if (rest.length === 0)
32
+ break;
33
+ // Style block — find matching } respecting quotes
34
+ if (rest[0] === '{') {
35
+ let close = -1;
36
+ let inQuote = false;
37
+ for (let j = 1; j < rest.length; j++) {
38
+ if (rest[j] === '"')
39
+ inQuote = !inQuote;
40
+ if (!inQuote && rest[j] === '}') {
41
+ close = j;
42
+ break;
43
+ }
44
+ }
45
+ if (close === -1)
46
+ break;
47
+ const block = rest.slice(1, close);
48
+ parseStyleBlock(block, styles, pseudoStyles);
49
+ rest = rest.slice(close + 1);
50
+ continue;
51
+ }
52
+ // Theme ref
53
+ if (rest[0] === '$') {
54
+ const refMatch = rest.match(/^\$([A-Za-z_][A-Za-z0-9_-]*)/);
55
+ if (refMatch) {
56
+ themeRefs.push(refMatch[1]);
57
+ rest = rest.slice(refMatch[0].length);
58
+ continue;
59
+ }
60
+ }
61
+ // Prop: key={{ expression }}
62
+ const exprPropMatch = rest.match(/^([A-Za-z_][A-Za-z0-9_-]*)=\{\{/);
63
+ if (exprPropMatch) {
64
+ const key = exprPropMatch[1];
65
+ rest = rest.slice(exprPropMatch[0].length);
66
+ // Find matching }}
67
+ let depth = 1;
68
+ let j = 0;
69
+ for (; j < rest.length - 1; j++) {
70
+ if (rest[j] === '{' && rest[j + 1] === '{') {
71
+ depth++;
72
+ j++;
73
+ }
74
+ else if (rest[j] === '}' && rest[j + 1] === '}') {
75
+ depth--;
76
+ j++;
77
+ if (depth === 0)
78
+ break;
79
+ }
80
+ }
81
+ const expr = rest.slice(0, j - 1).trim();
82
+ rest = rest.slice(j + 1);
83
+ props[key] = { __expr: true, code: expr };
84
+ continue;
85
+ }
86
+ // Prop: key=value or key="quoted value"
87
+ const propMatch = rest.match(/^([A-Za-z_][A-Za-z0-9_-]*)=/);
88
+ if (propMatch) {
89
+ const key = propMatch[1];
90
+ rest = rest.slice(propMatch[0].length);
91
+ let value;
92
+ if (rest[0] === '"') {
93
+ const endQuote = rest.indexOf('"', 1);
94
+ value = rest.slice(1, endQuote);
95
+ rest = rest.slice(endQuote + 1);
96
+ }
97
+ else if (rest.startsWith('{{')) {
98
+ // Bare expression without key= prefix (e.g. value={{ x }})
99
+ rest = rest.slice(2);
100
+ let depth = 1;
101
+ let j = 0;
102
+ for (; j < rest.length - 1; j++) {
103
+ if (rest[j] === '{' && rest[j + 1] === '{') {
104
+ depth++;
105
+ j++;
106
+ }
107
+ else if (rest[j] === '}' && rest[j + 1] === '}') {
108
+ depth--;
109
+ j++;
110
+ if (depth === 0)
111
+ break;
112
+ }
113
+ }
114
+ const expr = rest.slice(0, j - 1).trim();
115
+ rest = rest.slice(j + 1);
116
+ props[key] = { __expr: true, code: expr };
117
+ continue;
118
+ }
119
+ else {
120
+ const endMatch = rest.match(/^[^\s{$]+/);
121
+ value = endMatch ? endMatch[0] : '';
122
+ rest = rest.slice(value.length);
123
+ }
124
+ props[key] = value;
125
+ continue;
126
+ }
127
+ // Unknown token — collect as warning, skip to next whitespace
128
+ const skipped = rest.match(/^\S+/);
129
+ if (skipped) {
130
+ const errCol = col + (raw.length - rest.length);
131
+ _parseWarnings.push(`Unexpected token "${skipped[0]}" at line ${lineNum}:${errCol}`);
132
+ rest = rest.slice(skipped[0].length);
133
+ continue;
134
+ }
135
+ break;
136
+ }
137
+ return {
138
+ indent: indent / 2,
139
+ type,
140
+ props,
141
+ styles,
142
+ pseudoStyles,
143
+ themeRefs,
144
+ loc: { line: lineNum, col },
145
+ };
146
+ }
147
+ function splitStylePairs(block) {
148
+ const pairs = [];
149
+ let current = '';
150
+ let inQuote = false;
151
+ let parenDepth = 0;
152
+ for (let i = 0; i < block.length; i++) {
153
+ const ch = block[i];
154
+ if (ch === '"') {
155
+ inQuote = !inQuote;
156
+ current += ch;
157
+ }
158
+ else if (!inQuote && ch === '(') {
159
+ parenDepth++;
160
+ current += ch;
161
+ }
162
+ else if (!inQuote && ch === ')') {
163
+ parenDepth--;
164
+ current += ch;
165
+ }
166
+ else if (!inQuote && parenDepth === 0 && ch === ',') {
167
+ if (current.trim())
168
+ pairs.push(current.trim());
169
+ current = '';
170
+ }
171
+ else {
172
+ current += ch;
173
+ }
174
+ }
175
+ if (current.trim())
176
+ pairs.push(current.trim());
177
+ return pairs;
178
+ }
179
+ function parseStyleBlock(block, styles, pseudoStyles) {
180
+ const pairs = splitStylePairs(block);
181
+ for (const pair of pairs) {
182
+ // Pseudo-selector: :press:bg:#005BB5
183
+ const pseudoMatch = pair.match(/^:([a-z]+):([A-Za-z0-9_-]+):(.+)$/);
184
+ if (pseudoMatch) {
185
+ const [, pseudo, key, value] = pseudoMatch;
186
+ if (!pseudoStyles[pseudo])
187
+ pseudoStyles[pseudo] = {};
188
+ pseudoStyles[pseudo][key] = value.trim();
189
+ continue;
190
+ }
191
+ // Quoted key: "backdrop-filter":"blur(8px)"
192
+ const quotedKeyMatch = pair.match(/^"([^"]+)"\s*:\s*(.*)/);
193
+ if (quotedKeyMatch) {
194
+ const key = quotedKeyMatch[1];
195
+ let value = quotedKeyMatch[2].trim();
196
+ // Strip surrounding quotes from value if present
197
+ if (value.startsWith('"') && value.endsWith('"')) {
198
+ value = value.slice(1, -1);
199
+ }
200
+ styles[key] = value;
201
+ continue;
202
+ }
203
+ // Normal: key:value (value may be quoted)
204
+ const colonIdx = pair.indexOf(':');
205
+ if (colonIdx > 0) {
206
+ const key = pair.slice(0, colonIdx).trim();
207
+ let value = pair.slice(colonIdx + 1).trim();
208
+ // Strip surrounding quotes from value if present
209
+ if (value.startsWith('"') && value.endsWith('"')) {
210
+ value = value.slice(1, -1);
211
+ }
212
+ styles[key] = value;
213
+ }
214
+ }
215
+ }
216
+ function expandMinified(source) {
217
+ // Detect minified S-expression format: node(child1,child2)
218
+ // Convert to indented format for the standard parser
219
+ if (!source.includes('(') || source.split('\n').length > 2)
220
+ return source;
221
+ const result = [];
222
+ let depth = 0;
223
+ let current = '';
224
+ let inQuote = false;
225
+ let inBraces = 0;
226
+ for (let i = 0; i < source.length; i++) {
227
+ const ch = source[i];
228
+ if (ch === '"') {
229
+ inQuote = !inQuote;
230
+ current += ch;
231
+ continue;
232
+ }
233
+ if (inQuote) {
234
+ current += ch;
235
+ continue;
236
+ }
237
+ if (ch === '{') {
238
+ inBraces++;
239
+ current += ch;
240
+ continue;
241
+ }
242
+ if (ch === '}') {
243
+ inBraces--;
244
+ current += ch;
245
+ continue;
246
+ }
247
+ if (inBraces > 0) {
248
+ current += ch;
249
+ continue;
250
+ }
251
+ if (ch === '(') {
252
+ result.push(' '.repeat(depth) + current.trim());
253
+ current = '';
254
+ depth++;
255
+ }
256
+ else if (ch === ')') {
257
+ if (current.trim())
258
+ result.push(' '.repeat(depth) + current.trim());
259
+ current = '';
260
+ depth--;
261
+ }
262
+ else if (ch === ',' && inBraces === 0) {
263
+ if (current.trim())
264
+ result.push(' '.repeat(depth) + current.trim());
265
+ current = '';
266
+ }
267
+ else {
268
+ current += ch;
269
+ }
270
+ }
271
+ if (current.trim())
272
+ result.push(' '.repeat(depth) + current.trim());
273
+ return result.join('\n');
274
+ }
275
+ /** Get warnings from the last parse() call */
276
+ export function getParseWarnings() { return [..._parseWarnings]; }
277
+ export function parse(source) {
278
+ _parseWarnings = [];
279
+ // Handle minified S-expression format
280
+ source = expandMinified(source);
281
+ const lines = source.split('\n');
282
+ const parsed = [];
283
+ for (let i = 0; i < lines.length; i++) {
284
+ const trimmed = lines[i].trimStart();
285
+ const multilineType = [...MULTILINE_BLOCK_TYPES].find(type => trimmed.startsWith(`${type} <<<`));
286
+ if (multilineType) {
287
+ const indent = lines[i].search(/\S/);
288
+ const codeLines = [];
289
+ const startLine = i + 1;
290
+ const blockOpen = `${multilineType} <<<`;
291
+ // Check if inline close on same line
292
+ const afterOpen = trimmed.slice(blockOpen.length);
293
+ if (afterOpen.includes('>>>')) {
294
+ codeLines.push(afterOpen.split('>>>')[0]);
295
+ }
296
+ else {
297
+ i++;
298
+ while (i < lines.length && !lines[i].includes('>>>')) {
299
+ codeLines.push(lines[i]);
300
+ i++;
301
+ }
302
+ // Capture text before >>> on closing line
303
+ if (i < lines.length) {
304
+ const closeLine = lines[i];
305
+ const closeIdx = closeLine.indexOf('>>>');
306
+ if (closeIdx > 0)
307
+ codeLines.push(closeLine.slice(0, closeIdx));
308
+ }
309
+ }
310
+ parsed.push({
311
+ indent: indent / 2,
312
+ type: multilineType,
313
+ props: { code: codeLines.join('\n').trim() },
314
+ styles: {},
315
+ pseudoStyles: {},
316
+ themeRefs: [],
317
+ loc: { line: startLine, col: indent + 1 },
318
+ });
319
+ continue;
320
+ }
321
+ const p = parseLine(lines[i], i + 1);
322
+ if (p)
323
+ parsed.push(p);
324
+ }
325
+ if (parsed.length === 0) {
326
+ return { type: 'document', children: [], loc: { line: 1, col: 1 } };
327
+ }
328
+ function toNode(p) {
329
+ const node = {
330
+ type: p.type,
331
+ loc: p.loc,
332
+ props: { ...p.props },
333
+ children: [],
334
+ };
335
+ if (Object.keys(p.styles).length > 0)
336
+ node.props.styles = p.styles;
337
+ if (Object.keys(p.pseudoStyles).length > 0)
338
+ node.props.pseudoStyles = p.pseudoStyles;
339
+ if (p.themeRefs.length > 0)
340
+ node.props.themeRefs = p.themeRefs;
341
+ return node;
342
+ }
343
+ // Build tree using indent levels
344
+ const root = toNode(parsed[0]);
345
+ const stack = [{ node: root, indent: parsed[0].indent }];
346
+ for (let i = 1; i < parsed.length; i++) {
347
+ const p = parsed[i];
348
+ const node = toNode(p);
349
+ // Pop stack until we find a parent at a lower indent level
350
+ while (stack.length > 1 && stack[stack.length - 1].indent >= p.indent) {
351
+ stack.pop();
352
+ }
353
+ const parent = stack[stack.length - 1].node;
354
+ if (!parent.children)
355
+ parent.children = [];
356
+ parent.children.push(node);
357
+ stack.push({ node, indent: p.indent });
358
+ }
359
+ return root;
360
+ }
361
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAGA,IAAI,cAAc,GAAa,EAAE,CAAC;AAYlC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5D,SAAS,SAAS,CAAC,GAAW,EAAE,OAAe;IAC7C,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;IAEvB,eAAe;IACf,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/B,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,YAAY,GAA2C,EAAE,CAAC;IAChE,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,0EAA0E;IAC1E,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QAE7B,kDAAkD;QAClD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;YACf,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;gBACxC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACxD,CAAC;YACD,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,MAAM;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACtC,SAAS;YACX,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACpE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,mBAAmB;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAAC,CAAC;qBACxD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,KAAK,KAAK,CAAC;wBAAE,MAAM;gBAAC,CAAC;YAC5F,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,wCAAwC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,KAAa,CAAC;YAClB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACtC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,2DAA2D;gBAC3D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAAC,KAAK,EAAE,CAAC;wBAAC,CAAC,EAAE,CAAC;oBAAC,CAAC;yBACxD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAAC,KAAK,EAAE,CAAC;wBAAC,CAAC,EAAE,CAAC;wBAAC,IAAI,KAAK,KAAK,CAAC;4BAAE,MAAM;oBAAC,CAAC;gBAC5F,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC1C,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACzC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,cAAc,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;YACrF,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,GAAG,CAAC;QAClB,IAAI;QACJ,KAAK;QACL,MAAM;QACN,YAAY;QACZ,SAAS;QACT,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,OAAO,CAAC;YACnB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YACb,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,UAAU,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACtB,KAAa,EACb,MAA8B,EAC9B,YAAoD;IAEpD,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,qCAAqC;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACpE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAAE,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrD,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,iDAAiD;YACjD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,SAAS;QACX,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,iDAAiD;YACjD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,2DAA2D;IAC3D,qDAAqD;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAE1E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,OAAO,GAAG,CAAC,OAAO,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACzC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,QAAQ,EAAE,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACxD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,QAAQ,EAAE,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACxD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAE9C,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACrE,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAErE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,gBAAgB,KAAe,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,cAAc,GAAG,EAAE,CAAC;IACpB,sCAAsC;IACtC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAErC,MAAM,aAAa,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;QACjG,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,SAAS,GAAG,GAAG,aAAa,MAAM,CAAC;YACzC,qCAAqC;YACrC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzB,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,0CAA0C;gBAC1C,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC1C,IAAI,QAAQ,GAAG,CAAC;wBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM,EAAE,MAAM,GAAG,CAAC;gBAClB,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5C,MAAM,EAAE,EAAE;gBACV,YAAY,EAAE,EAAE;gBAChB,SAAS,EAAE,EAAE;gBACb,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;aAC1C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IACtE,CAAC;IAED,SAAS,MAAM,CAAC,CAAa;QAC3B,MAAM,IAAI,GAAW;YACnB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;YACrB,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACpE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAM,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;QACtF,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAM,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAuC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEvB,2DAA2D;QAC3D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACtE,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/spec.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Kern v2 Specification
3
+ *
4
+ * The LLM-native language. Swiss-engineered.
5
+ * Designed by 3 AIs through forge + tribunal + brainstorm.
6
+ *
7
+ * Foundation: indent-based, semantic names, key=value props
8
+ * Styles: shorthand blocks in {} with CSS escape hatch
9
+ * Meta: theme nodes ($ref), pseudo-selectors (:press, :hover)
10
+ * Targets: Next.js, React+Tailwind, React Native, Express
11
+ */
12
+ export declare const KERN_VERSION = "2.0.0";
13
+ export declare const IR_GRAMMAR = "\ndocument = node+\nnode = indent type (SP prop)* (SP style)? (SP themeref)* NL child*\nchild = node\nindent = \" \"*\ntype = ident\nprop = ident \"=\" value\nvalue = quoted | bare\nquoted = '\"' [^\"]* '\"'\nbare = [^\\s{$]+\nstyle = \"{\" spair (\",\" spair)* \"}\"\nspair = sident \":\" svalue | \":\" pseudo \":\" sident \":\" svalue\npseudo = \"press\" | \"hover\" | \"active\" | \"focus\"\nsident = shorthand | ident\nsvalue = [^,}]+\nthemeref = \"$\" ident\nident = [A-Za-z_][A-Za-z0-9_-]*\nSP = \" \"+\nNL = \"\\n\" | EOF\n";
14
+ export declare const NODE_TYPES: readonly ["screen", "row", "col", "card", "scroll", "text", "image", "progress", "divider", "button", "input", "modal", "list", "item", "tabs", "tab", "header", "theme", "server", "route", "middleware", "handler", "schema", "stream", "spawn", "timer", "on", "env", "cli", "command", "arg", "flag", "import", "separator", "table", "scoreboard", "metric", "spinner", "progress", "box", "gradient", "repl", "guard", "parallel", "dispatch", "then", "each"];
15
+ export type IRNodeType = (typeof NODE_TYPES)[number];
16
+ export declare const STYLE_SHORTHANDS: Record<string, string>;
17
+ export declare const VALUE_SHORTHANDS: Record<string, string>;