@kernlang/core 3.1.5 → 3.1.7

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 (112) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +5 -2
  3. package/dist/codegen/data-layer.d.ts +12 -0
  4. package/dist/codegen/data-layer.js +291 -0
  5. package/dist/codegen/data-layer.js.map +1 -0
  6. package/dist/codegen/emitters.js +1 -4
  7. package/dist/codegen/emitters.js.map +1 -1
  8. package/dist/codegen/events.d.ts +9 -0
  9. package/dist/codegen/events.js +169 -0
  10. package/dist/codegen/events.js.map +1 -0
  11. package/dist/codegen/functions.d.ts +8 -0
  12. package/dist/codegen/functions.js +149 -0
  13. package/dist/codegen/functions.js.map +1 -0
  14. package/dist/codegen/ground-layer.d.ts +22 -0
  15. package/dist/codegen/ground-layer.js +321 -0
  16. package/dist/codegen/ground-layer.js.map +1 -0
  17. package/dist/codegen/helpers.d.ts +2 -0
  18. package/dist/codegen/helpers.js +19 -7
  19. package/dist/codegen/helpers.js.map +1 -1
  20. package/dist/codegen/machines.d.ts +9 -0
  21. package/dist/codegen/machines.js +129 -0
  22. package/dist/codegen/machines.js.map +1 -0
  23. package/dist/codegen/modules.d.ts +10 -0
  24. package/dist/codegen/modules.js +43 -0
  25. package/dist/codegen/modules.js.map +1 -0
  26. package/dist/codegen/screens.d.ts +29 -0
  27. package/dist/codegen/screens.js +202 -0
  28. package/dist/codegen/screens.js.map +1 -0
  29. package/dist/codegen/semantic-types.d.ts +14 -0
  30. package/dist/codegen/semantic-types.js +31 -0
  31. package/dist/codegen/semantic-types.js.map +1 -0
  32. package/dist/codegen/test-gen.d.ts +7 -0
  33. package/dist/codegen/test-gen.js +56 -0
  34. package/dist/codegen/test-gen.js.map +1 -0
  35. package/dist/codegen/type-system.d.ts +11 -0
  36. package/dist/codegen/type-system.js +171 -0
  37. package/dist/codegen/type-system.js.map +1 -0
  38. package/dist/codegen-core.d.ts +30 -36
  39. package/dist/codegen-core.js +258 -1459
  40. package/dist/codegen-core.js.map +1 -1
  41. package/dist/concepts.js.map +1 -1
  42. package/dist/config.d.ts +20 -1
  43. package/dist/config.js +36 -3
  44. package/dist/config.js.map +1 -1
  45. package/dist/coverage-gap.js +9 -5
  46. package/dist/coverage-gap.js.map +1 -1
  47. package/dist/decompiler.d.ts +10 -1
  48. package/dist/decompiler.js +21 -4
  49. package/dist/decompiler.js.map +1 -1
  50. package/dist/errors.d.ts +5 -0
  51. package/dist/errors.js +11 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/index.d.ts +33 -28
  54. package/dist/index.js +40 -35
  55. package/dist/index.js.map +1 -1
  56. package/dist/node-props.d.ts +255 -0
  57. package/dist/node-props.js +35 -0
  58. package/dist/node-props.js.map +1 -0
  59. package/dist/parser-core.d.ts +5 -0
  60. package/dist/parser-core.js +364 -0
  61. package/dist/parser-core.js.map +1 -0
  62. package/dist/parser-diagnostics.d.ts +14 -0
  63. package/dist/parser-diagnostics.js +32 -0
  64. package/dist/parser-diagnostics.js.map +1 -0
  65. package/dist/parser-keywords.d.ts +5 -0
  66. package/dist/parser-keywords.js +203 -0
  67. package/dist/parser-keywords.js.map +1 -0
  68. package/dist/parser-style.d.ts +3 -0
  69. package/dist/parser-style.js +73 -0
  70. package/dist/parser-style.js.map +1 -0
  71. package/dist/parser-token-stream.d.ts +27 -0
  72. package/dist/parser-token-stream.js +81 -0
  73. package/dist/parser-token-stream.js.map +1 -0
  74. package/dist/parser-tokenizer.d.ts +11 -0
  75. package/dist/parser-tokenizer.js +188 -0
  76. package/dist/parser-tokenizer.js.map +1 -0
  77. package/dist/parser.d.ts +61 -14
  78. package/dist/parser.js +65 -865
  79. package/dist/parser.js.map +1 -1
  80. package/dist/scanner.js +85 -25
  81. package/dist/scanner.js.map +1 -1
  82. package/dist/schema.d.ts +7 -2
  83. package/dist/schema.js +7 -2
  84. package/dist/schema.js.map +1 -1
  85. package/dist/source-map.d.ts +27 -0
  86. package/dist/source-map.js +82 -0
  87. package/dist/source-map.js.map +1 -0
  88. package/dist/spec.d.ts +1 -1
  89. package/dist/spec.js +197 -55
  90. package/dist/spec.js.map +1 -1
  91. package/dist/styles-react.js +1 -1
  92. package/dist/styles-react.js.map +1 -1
  93. package/dist/styles-tailwind.d.ts +10 -0
  94. package/dist/styles-tailwind.js +62 -15
  95. package/dist/styles-tailwind.js.map +1 -1
  96. package/dist/template-catalog.js +1 -1
  97. package/dist/template-catalog.js.map +1 -1
  98. package/dist/template-engine.d.ts +11 -6
  99. package/dist/template-engine.js +20 -12
  100. package/dist/template-engine.js.map +1 -1
  101. package/dist/types.d.ts +8 -3
  102. package/dist/utils.d.ts +21 -1
  103. package/dist/utils.js +29 -5
  104. package/dist/utils.js.map +1 -1
  105. package/dist/version-adapters.js +1 -2
  106. package/dist/version-adapters.js.map +1 -1
  107. package/dist/version-detect.js +3 -3
  108. package/dist/version-detect.js.map +1 -1
  109. package/dist/walk.d.ts +40 -0
  110. package/dist/walk.js +111 -0
  111. package/dist/walk.js.map +1 -0
  112. package/package.json +2 -2
@@ -0,0 +1,364 @@
1
+ /** @internal Core parser pipeline — line parsing, tree building, and orchestration. */
2
+ import { commitParseState, createParseState, emitDiagnostic } from './parser-diagnostics.js';
3
+ import { KEYWORD_HANDLERS } from './parser-keywords.js';
4
+ import { parseStyleBlock } from './parser-style.js';
5
+ import { TokenStream } from './parser-token-stream.js';
6
+ import { tokenizeLineInternal } from './parser-tokenizer.js';
7
+ import { defaultRuntime } from './runtime.js';
8
+ import { isKnownNodeType } from './spec.js';
9
+ // ── Prop parsing ─────────────────────────────────────────────────────────
10
+ /** Map a value token to its JS representation. */
11
+ function tokenValue(tok) {
12
+ if (tok.kind === 'expr')
13
+ return { __expr: true, code: tok.value };
14
+ if (tok.kind === 'quoted')
15
+ return tok.value;
16
+ return tok.value;
17
+ }
18
+ /** Try to parse a key=value prop from the stream. Returns true if consumed. */
19
+ function parseProp(state, s, props, lineNum, col) {
20
+ if (!s.isKeyValue())
21
+ return false;
22
+ s.skipWS();
23
+ const keyTok = s.next();
24
+ const key = keyTok.value; // identifier
25
+ s.next(); // =
26
+ if (key in props) {
27
+ emitDiagnostic(state, 'DUPLICATE_PROP', 'warning', `Duplicate property '${key}' at line ${lineNum ?? 0}`, lineNum ?? 0, (col ?? 0) + keyTok.pos, {
28
+ endCol: (col ?? 0) + keyTok.pos + key.length,
29
+ });
30
+ }
31
+ const valTok = s.peek();
32
+ if (!valTok || valTok.kind === 'whitespace') {
33
+ props[key] = '';
34
+ return true;
35
+ }
36
+ // key={{expr}} or key="quoted"
37
+ if (valTok.kind === 'expr' || valTok.kind === 'quoted') {
38
+ props[key] = tokenValue(s.next());
39
+ return true;
40
+ }
41
+ // key=bareValue — collect tokens up to next WS/style/themeRef
42
+ let value = '';
43
+ while (!s.done()) {
44
+ const vt = s.peek();
45
+ if (vt.kind === 'whitespace' || vt.kind === 'style' || vt.kind === 'themeRef')
46
+ break;
47
+ value += vt.value;
48
+ s.next();
49
+ }
50
+ props[key] = value;
51
+ return true;
52
+ }
53
+ // ── parseLine ────────────────────────────────────────────────────────────
54
+ function parseLine(state, raw, lineNum, runtime = defaultRuntime) {
55
+ if (raw.trim() === '')
56
+ return null;
57
+ const indent = raw.search(/\S/);
58
+ const indentText = raw.slice(0, indent);
59
+ const content = raw.slice(indent);
60
+ const col = indent + 1;
61
+ if (indentText.includes('\t')) {
62
+ emitDiagnostic(state, 'INVALID_INDENT', 'warning', `Tab indentation at line ${lineNum}`, lineNum, 1, {
63
+ endCol: indent + 1,
64
+ });
65
+ }
66
+ const diagBefore = state.diagnostics.length;
67
+ const tokens = tokenizeLineInternal(content, state);
68
+ for (let d = diagBefore; d < state.diagnostics.length; d++) {
69
+ if (state.diagnostics[d].line === 0)
70
+ state.diagnostics[d].line = lineNum;
71
+ state.diagnostics[d].col += indent;
72
+ state.diagnostics[d].endCol += indent;
73
+ }
74
+ const s = new TokenStream(tokens);
75
+ // First token must be an identifier (the node type)
76
+ const typeToken = s.tryIdent();
77
+ if (!typeToken) {
78
+ const firstToken = tokens.find((tok) => tok.kind !== 'whitespace');
79
+ if (firstToken) {
80
+ emitDiagnostic(state, 'DROPPED_LINE', 'error', `Dropped line ${lineNum}: expected a node type at the start of the line`, lineNum, col + firstToken.pos, {
81
+ endCol: col + content.length,
82
+ });
83
+ }
84
+ return null;
85
+ }
86
+ const type = typeToken;
87
+ if (!isKnownNodeType(type, runtime) && !runtime.multilineBlockTypes.has(type) && !runtime.isTemplateNode(type)) {
88
+ emitDiagnostic(state, 'UNKNOWN_NODE_TYPE', 'warning', `Unknown node type '${type}' at line ${lineNum}`, lineNum, col, {
89
+ endCol: col + type.length,
90
+ });
91
+ }
92
+ const props = {};
93
+ const styles = {};
94
+ const pseudoStyles = {};
95
+ const themeRefs = [];
96
+ // ── Evolved node parser hints (v4) ──────────────────────────────────
97
+ const evolvedHints = runtime.parserHints.get(type);
98
+ if (evolvedHints) {
99
+ if (evolvedHints.positionalArgs) {
100
+ for (const argName of evolvedHints.positionalArgs) {
101
+ const tok = s.consumeAnyValue();
102
+ if (tok)
103
+ props[argName] = tok.value;
104
+ }
105
+ }
106
+ if (evolvedHints.bareWord) {
107
+ s.skipWS();
108
+ if (!s.isKeyValue()) {
109
+ const id = s.tryIdent();
110
+ if (id)
111
+ props[evolvedHints.bareWord] = id;
112
+ }
113
+ }
114
+ }
115
+ // ── Keyword-specific handling ──────────────────────────────────────
116
+ const handler = KEYWORD_HANDLERS.get(type);
117
+ if (handler)
118
+ handler(s, props, content);
119
+ // ── Generic prop/style/theme parsing ───────────────────────────────
120
+ while (!s.done()) {
121
+ s.skipWS();
122
+ if (s.done())
123
+ break;
124
+ const tok = s.peek();
125
+ // Style block
126
+ if (tok.kind === 'style') {
127
+ parseStyleBlock(tok.value, styles, pseudoStyles);
128
+ s.next();
129
+ continue;
130
+ }
131
+ // Theme ref
132
+ if (tok.kind === 'themeRef') {
133
+ themeRefs.push(tok.value);
134
+ s.next();
135
+ continue;
136
+ }
137
+ // Key=value prop (extracted helper from Codex)
138
+ if (parseProp(state, s, props, lineNum, col))
139
+ continue;
140
+ // Unknown token — skip with warning
141
+ const skipped = s.next();
142
+ const errCol = col + skipped.pos;
143
+ emitDiagnostic(state, 'UNEXPECTED_TOKEN', 'warning', `Unexpected token "${skipped.value}" at line ${lineNum}:${errCol}`, lineNum, errCol, {
144
+ endCol: errCol + skipped.value.length,
145
+ });
146
+ }
147
+ return {
148
+ indent,
149
+ rawLength: content.length,
150
+ type,
151
+ props,
152
+ styles,
153
+ pseudoStyles,
154
+ themeRefs,
155
+ loc: { line: lineNum, col, endLine: lineNum, endCol: col + content.length },
156
+ };
157
+ }
158
+ // ── Minified source expander ─────────────────────────────────────────────
159
+ function expandMinified(source) {
160
+ if (!source.includes('(') || source.split('\n').length > 1)
161
+ return source;
162
+ const result = [];
163
+ let depth = 0;
164
+ let current = '';
165
+ let inQuote = false;
166
+ let inBraces = 0;
167
+ for (let i = 0; i < source.length; i++) {
168
+ const ch = source[i];
169
+ if (ch === '"') {
170
+ inQuote = !inQuote;
171
+ current += ch;
172
+ continue;
173
+ }
174
+ if (inQuote) {
175
+ current += ch;
176
+ continue;
177
+ }
178
+ if (ch === '{') {
179
+ inBraces++;
180
+ current += ch;
181
+ continue;
182
+ }
183
+ if (ch === '}') {
184
+ inBraces--;
185
+ current += ch;
186
+ continue;
187
+ }
188
+ if (inBraces > 0) {
189
+ current += ch;
190
+ continue;
191
+ }
192
+ if (ch === '(') {
193
+ result.push(' '.repeat(depth) + current.trim());
194
+ current = '';
195
+ depth++;
196
+ }
197
+ else if (ch === ')') {
198
+ if (current.trim())
199
+ result.push(' '.repeat(depth) + current.trim());
200
+ current = '';
201
+ depth--;
202
+ }
203
+ else if (ch === ',' && inBraces === 0) {
204
+ if (current.trim())
205
+ result.push(' '.repeat(depth) + current.trim());
206
+ current = '';
207
+ }
208
+ else {
209
+ current += ch;
210
+ }
211
+ }
212
+ if (current.trim())
213
+ result.push(' '.repeat(depth) + current.trim());
214
+ return result.join('\n');
215
+ }
216
+ // ── Multi-line block + line orchestration ────────────────────────────────
217
+ /** Process source lines into ParsedLine entries (multiline blocks + regular lines). */
218
+ function parseLines(state, source, runtime = defaultRuntime) {
219
+ const lines = expandMinified(source).split('\n');
220
+ const parsed = [];
221
+ for (let i = 0; i < lines.length; i++) {
222
+ const trimmed = lines[i].trimStart();
223
+ const multilineType = [...runtime.multilineBlockTypes].find((type) => trimmed.startsWith(`${type} <<<`));
224
+ if (multilineType) {
225
+ const indent = lines[i].search(/\S/);
226
+ const codeLines = [];
227
+ const startLine = i + 1;
228
+ const blockOpen = `${multilineType} <<<`;
229
+ const afterOpen = trimmed.slice(blockOpen.length);
230
+ let closed = false;
231
+ if (afterOpen.includes('>>>')) {
232
+ closed = true;
233
+ codeLines.push(afterOpen.split('>>>')[0]);
234
+ }
235
+ else {
236
+ i++;
237
+ while (i < lines.length && !lines[i].trimStart().startsWith('>>>')) {
238
+ codeLines.push(lines[i]);
239
+ i++;
240
+ }
241
+ if (i < lines.length) {
242
+ closed = true;
243
+ const closeLine = lines[i];
244
+ const closeIdx = closeLine.indexOf('>>>');
245
+ if (closeIdx > 0) {
246
+ const before = closeLine.slice(0, closeIdx).trim();
247
+ if (before)
248
+ codeLines.push(before);
249
+ }
250
+ }
251
+ }
252
+ if (!closed) {
253
+ emitDiagnostic(state, 'UNEXPECTED_TOKEN', 'error', `Unclosed multiline block '${multilineType} <<<' at line ${startLine}`, startLine, indent + 1, {
254
+ endCol: indent + 1 + blockOpen.length,
255
+ suggestion: `Close the '${multilineType} <<<' block with a matching '>>>' marker before the file ends.`,
256
+ });
257
+ }
258
+ parsed.push({
259
+ indent,
260
+ rawLength: lines[startLine - 1].slice(indent).length,
261
+ type: multilineType,
262
+ props: { code: codeLines.join('\n').replace(/^\n+|\n+$/g, '') },
263
+ styles: {},
264
+ pseudoStyles: {},
265
+ themeRefs: [],
266
+ loc: {
267
+ line: startLine,
268
+ col: indent + 1,
269
+ endLine: startLine,
270
+ endCol: indent + 1 + lines[startLine - 1].slice(indent).length,
271
+ },
272
+ });
273
+ continue;
274
+ }
275
+ const p = parseLine(state, lines[i], i + 1, runtime);
276
+ if (p)
277
+ parsed.push(p);
278
+ }
279
+ return parsed;
280
+ }
281
+ // ── Tree building ────────────────────────────────────────────────────────
282
+ /** Convert a ParsedLine to an IRNode (no children yet). */
283
+ function toNode(p) {
284
+ const node = {
285
+ type: p.type,
286
+ loc: p.loc,
287
+ props: { ...p.props },
288
+ children: [],
289
+ };
290
+ if (Object.keys(p.styles).length > 0)
291
+ node.props.styles = p.styles;
292
+ if (Object.keys(p.pseudoStyles).length > 0)
293
+ node.props.pseudoStyles = p.pseudoStyles;
294
+ if (p.themeRefs.length > 0)
295
+ node.props.themeRefs = p.themeRefs;
296
+ return node;
297
+ }
298
+ /** Build a tree from parsed lines using indent-based stack. */
299
+ function buildTree(state, parsed, root, rootIndent) {
300
+ const stack = [{ node: root, indent: rootIndent }];
301
+ const seenIndents = new Set([rootIndent]);
302
+ for (let i = 0; i < parsed.length; i++) {
303
+ const p = parsed[i];
304
+ const node = toNode(p);
305
+ if (p.indent < (stack[stack.length - 1]?.indent ?? 0) && !seenIndents.has(p.indent)) {
306
+ emitDiagnostic(state, 'INDENT_JUMP', 'warning', `Dedent to unseen indent level ${p.indent} at line ${p.loc.line}`, p.loc.line, p.loc.col, {
307
+ endCol: p.loc.col + p.type.length,
308
+ });
309
+ }
310
+ while (stack.length > 1 && stack[stack.length - 1].indent >= p.indent) {
311
+ stack.pop();
312
+ }
313
+ seenIndents.add(p.indent);
314
+ const parent = stack[stack.length - 1].node;
315
+ if (!parent.children)
316
+ parent.children = [];
317
+ parent.children.push(node);
318
+ stack.push({ node, indent: p.indent });
319
+ }
320
+ }
321
+ /** Recursively compute endLine/endCol for each node based on its last child. */
322
+ function computeEndSpans(node) {
323
+ if (node.children && node.children.length > 0) {
324
+ for (const child of node.children)
325
+ computeEndSpans(child);
326
+ const lastChild = node.children[node.children.length - 1];
327
+ if (lastChild.loc && node.loc) {
328
+ node.loc.endLine = lastChild.loc.endLine ?? lastChild.loc.line;
329
+ node.loc.endCol = lastChild.loc.endCol ?? lastChild.loc.col;
330
+ }
331
+ }
332
+ else if (node.loc) {
333
+ node.loc.endLine = node.loc.endLine ?? node.loc.line;
334
+ node.loc.endCol = node.loc.endCol ?? node.loc.col;
335
+ }
336
+ }
337
+ // ── Core parse driver ────────────────────────────────────────────────────
338
+ /** @internal Single internal entry that wires parseLines → buildTree → computeEndSpans. */
339
+ export function parseInternal(source, asDocument, runtime) {
340
+ const rt = runtime ?? defaultRuntime;
341
+ const state = createParseState();
342
+ const parsed = parseLines(state, source, rt);
343
+ if (parsed.length === 0) {
344
+ if (source.trim() === '') {
345
+ emitDiagnostic(state, 'EMPTY_DOCUMENT', 'info', 'Source document is empty', 1, 1, { endCol: 1 });
346
+ }
347
+ const root = { type: 'document', children: [], loc: { line: 1, col: 1, endLine: 1, endCol: 1 } };
348
+ commitParseState(state, rt);
349
+ return { root, diagnostics: [...state.diagnostics] };
350
+ }
351
+ let root;
352
+ if (asDocument) {
353
+ root = { type: 'document', children: [], loc: { line: 1, col: 1 } };
354
+ buildTree(state, parsed, root, -1);
355
+ }
356
+ else {
357
+ root = toNode(parsed[0]);
358
+ buildTree(state, parsed.slice(1), root, parsed[0].indent);
359
+ }
360
+ computeEndSpans(root);
361
+ commitParseState(state, rt);
362
+ return { root, diagnostics: [...state.diagnostics] };
363
+ }
364
+ //# sourceMappingURL=parser-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-core.js","sourceRoot":"","sources":["../src/parser-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** @internal Parser diagnostics infrastructure — not part of the public API. */
2
+ import { type KernRuntime } from './runtime.js';
3
+ import type { ParseDiagnostic, ParseErrorCode } from './types.js';
4
+ export interface ParseState {
5
+ diagnostics: ParseDiagnostic[];
6
+ }
7
+ interface EmitDiagnosticOptions {
8
+ endCol?: number;
9
+ suggestion?: string;
10
+ }
11
+ export declare function createParseState(): ParseState;
12
+ export declare function commitParseState(state: ParseState, runtime?: KernRuntime): void;
13
+ export declare function emitDiagnostic(state: ParseState, code: ParseErrorCode, severity: ParseDiagnostic['severity'], message: string, line: number, col: number, options?: EmitDiagnosticOptions): void;
14
+ export {};
@@ -0,0 +1,32 @@
1
+ /** @internal Parser diagnostics infrastructure — not part of the public API. */
2
+ import { defaultRuntime } from './runtime.js';
3
+ const DIAGNOSTIC_SUGGESTIONS = {
4
+ UNCLOSED_EXPR: 'Close the `{{ ... }}` expression or move the unfinished code into a quoted string.',
5
+ UNCLOSED_STYLE: 'Close the `{ ... }` style block with `}` and keep any commas inside the block.',
6
+ UNCLOSED_STRING: 'Add the missing closing quote or escape any embedded quotes inside the string.',
7
+ UNEXPECTED_TOKEN: 'Remove the stray token or quote it so the parser can treat it as a value.',
8
+ EMPTY_DOCUMENT: 'Add at least one root KERN node such as `screen`, `view`, or `text`.',
9
+ INVALID_INDENT: 'Replace tabs with spaces so indentation is consistent across sibling nodes.',
10
+ UNKNOWN_NODE_TYPE: 'Rename this node to a supported KERN keyword or register it as an evolved node type.',
11
+ INDENT_JUMP: 'Align this line with an existing indentation level so the parent-child structure is unambiguous.',
12
+ DUPLICATE_PROP: 'Remove the duplicate property or merge the values into a single prop assignment.',
13
+ DROPPED_LINE: 'Rewrite this line so it starts with a valid KERN node type and move stray symbols into props.',
14
+ };
15
+ export function createParseState() {
16
+ return { diagnostics: [] };
17
+ }
18
+ export function commitParseState(state, runtime = defaultRuntime) {
19
+ runtime.lastParseDiagnostics = state.diagnostics.map((d) => ({ ...d }));
20
+ }
21
+ export function emitDiagnostic(state, code, severity, message, line, col, options = {}) {
22
+ state.diagnostics.push({
23
+ code,
24
+ severity,
25
+ message,
26
+ line,
27
+ col,
28
+ endCol: Math.max(options.endCol ?? col + 1, col),
29
+ suggestion: options.suggestion ?? DIAGNOSTIC_SUGGESTIONS[code],
30
+ });
31
+ }
32
+ //# sourceMappingURL=parser-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-diagnostics.js","sourceRoot":"","sources":["../src/parser-diagnostics.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,cAAc,EAAoB,MAAM,cAAc,CAAC;AAYhE,MAAM,sBAAsB,GAAmC;IAC7D,aAAa,EAAE,oFAAoF;IACnG,cAAc,EAAE,gFAAgF;IAChG,eAAe,EAAE,gFAAgF;IACjG,gBAAgB,EAAE,2EAA2E;IAC7F,cAAc,EAAE,sEAAsE;IACtF,cAAc,EAAE,6EAA6E;IAC7F,iBAAiB,EAAE,sFAAsF;IACzG,WAAW,EAAE,kGAAkG;IAC/G,cAAc,EAAE,kFAAkF;IAClG,YAAY,EAAE,+FAA+F;CAC9G,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB,EAAE,UAAuB,cAAc;IACvF,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAiB,EACjB,IAAoB,EACpB,QAAqC,EACrC,OAAe,EACf,IAAY,EACZ,GAAW,EACX,UAAiC,EAAE;IAEnC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;QACrB,IAAI;QACJ,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,GAAG;QACH,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;QAChD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,sBAAsB,CAAC,IAAI,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** @internal Keyword-specific parsing handlers for KERN node types. */
2
+ import type { TokenStream } from './parser-token-stream.js';
3
+ type KeywordHandler = (s: TokenStream, props: Record<string, unknown>, content: string) => void;
4
+ export declare const KEYWORD_HANDLERS: Map<string, KeywordHandler>;
5
+ export {};
@@ -0,0 +1,203 @@
1
+ /** Consume a bare identifier into props if it's not a key=value pair. */
2
+ function consumeBareIdent(s, props, propName) {
3
+ s.skipWS();
4
+ if (s.isKeyValue())
5
+ return;
6
+ const id = s.tryIdent();
7
+ if (id)
8
+ props[propName] = id;
9
+ }
10
+ export const KEYWORD_HANDLERS = new Map([
11
+ [
12
+ 'theme',
13
+ (s, props) => {
14
+ consumeBareIdent(s, props, 'name');
15
+ },
16
+ ],
17
+ [
18
+ 'import',
19
+ (s, props) => {
20
+ s.skipWS();
21
+ const pos = s.position();
22
+ const id = s.tryIdent();
23
+ if (id === 'default') {
24
+ if (!s.done() && s.peek()?.kind !== 'equals') {
25
+ props.default = true;
26
+ s.skipWS();
27
+ }
28
+ else if (s.peek()?.kind === 'equals') {
29
+ s.setPosition(pos);
30
+ return;
31
+ }
32
+ else {
33
+ props.default = true;
34
+ return;
35
+ }
36
+ }
37
+ else if (id) {
38
+ s.setPosition(pos);
39
+ }
40
+ if (!s.isKeyValue()) {
41
+ s.skipWS();
42
+ const name = s.tryIdent();
43
+ if (name)
44
+ props.name = name;
45
+ }
46
+ },
47
+ ],
48
+ [
49
+ 'route',
50
+ (s, props) => {
51
+ s.skipWS();
52
+ const pos = s.position();
53
+ const verb = s.tryIdent();
54
+ if (verb && /^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)$/i.test(verb)) {
55
+ props.method = verb.toLowerCase();
56
+ s.skipWS();
57
+ const tok = s.peek();
58
+ if (tok && tok.kind === 'slash') {
59
+ props.path = tok.value;
60
+ s.next();
61
+ }
62
+ }
63
+ else if (verb) {
64
+ s.setPosition(pos);
65
+ }
66
+ },
67
+ ],
68
+ [
69
+ 'params',
70
+ (s, props, content) => {
71
+ s.skipWS();
72
+ const remaining = s.remainingRaw(content);
73
+ if (remaining.length > 0) {
74
+ const items = [];
75
+ const parts = remaining
76
+ .split(',')
77
+ .map((p) => p.trim())
78
+ .filter(Boolean);
79
+ for (const part of parts) {
80
+ const m = part.match(/^([A-Za-z_]\w*):([A-Za-z_]\w*(?:\[\])?)(?:\s*=\s*(.+))?$/);
81
+ if (m) {
82
+ const item = { name: m[1], type: m[2] };
83
+ if (m[3] !== undefined)
84
+ item.default = m[3].trim();
85
+ items.push(item);
86
+ }
87
+ }
88
+ props.items = items;
89
+ }
90
+ },
91
+ ],
92
+ [
93
+ 'auth',
94
+ (s, props) => {
95
+ consumeBareIdent(s, props, 'mode');
96
+ },
97
+ ],
98
+ [
99
+ 'validate',
100
+ (s, props) => {
101
+ consumeBareIdent(s, props, 'schema');
102
+ },
103
+ ],
104
+ [
105
+ 'error',
106
+ (s, props) => {
107
+ s.skipWS();
108
+ const num = s.tryNumber();
109
+ if (num) {
110
+ props.status = parseInt(num, 10);
111
+ s.skipWS();
112
+ const tok = s.peek();
113
+ if (tok && tok.kind === 'quoted') {
114
+ props.message = tok.value;
115
+ s.next();
116
+ }
117
+ }
118
+ },
119
+ ],
120
+ [
121
+ 'derive',
122
+ (s, props) => {
123
+ consumeBareIdent(s, props, 'name');
124
+ },
125
+ ],
126
+ [
127
+ 'guard',
128
+ (s, props) => {
129
+ consumeBareIdent(s, props, 'name');
130
+ },
131
+ ],
132
+ [
133
+ 'effect',
134
+ (s, props) => {
135
+ consumeBareIdent(s, props, 'name');
136
+ },
137
+ ],
138
+ [
139
+ 'strategy',
140
+ (s, props) => {
141
+ consumeBareIdent(s, props, 'name');
142
+ },
143
+ ],
144
+ [
145
+ 'trigger',
146
+ (s, props) => {
147
+ consumeBareIdent(s, props, 'kind');
148
+ },
149
+ ],
150
+ [
151
+ 'respond',
152
+ (s, props) => {
153
+ s.skipWS();
154
+ const num = s.tryNumber();
155
+ if (num)
156
+ props.status = parseInt(num, 10);
157
+ },
158
+ ],
159
+ // Rule syntax — native .kern lint rules
160
+ [
161
+ 'rule',
162
+ (s, props) => {
163
+ // rule id severity=error category=bug confidence=0.9
164
+ consumeBareIdent(s, props, 'id');
165
+ },
166
+ ],
167
+ [
168
+ 'message',
169
+ (s, props) => {
170
+ // message "template with {{interpolation}}"
171
+ s.skipWS();
172
+ const tok = s.peek();
173
+ if (tok && tok.kind === 'quoted') {
174
+ props.template = tok.value;
175
+ s.next();
176
+ }
177
+ },
178
+ ],
179
+ [
180
+ 'middleware',
181
+ (s, props, content) => {
182
+ s.skipWS();
183
+ if (!s.hasMore())
184
+ return;
185
+ if (s.hasEquals())
186
+ return;
187
+ const remaining = s.remainingRaw(content).trim();
188
+ if (remaining.length > 0) {
189
+ const names = remaining
190
+ .split(',')
191
+ .map((n) => n.trim())
192
+ .filter(Boolean);
193
+ if (names.length > 1) {
194
+ props.names = names;
195
+ }
196
+ else if (names.length === 1) {
197
+ props.name = names[0];
198
+ }
199
+ }
200
+ },
201
+ ],
202
+ ]);
203
+ //# sourceMappingURL=parser-keywords.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-keywords.js","sourceRoot":"","sources":["../src/parser-keywords.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** @internal Style block parsing for KERN nodes. */
2
+ export declare function splitStylePairs(block: string): string[];
3
+ export declare function parseStyleBlock(block: string, styles: Record<string, string>, pseudoStyles: Record<string, Record<string, string>>): void;