@kernlang/core 3.1.5 → 3.1.6

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 (93) 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 +292 -0
  5. package/dist/codegen/data-layer.js.map +1 -0
  6. package/dist/codegen/events.d.ts +9 -0
  7. package/dist/codegen/events.js +158 -0
  8. package/dist/codegen/events.js.map +1 -0
  9. package/dist/codegen/functions.d.ts +8 -0
  10. package/dist/codegen/functions.js +147 -0
  11. package/dist/codegen/functions.js.map +1 -0
  12. package/dist/codegen/ground-layer.d.ts +22 -0
  13. package/dist/codegen/ground-layer.js +317 -0
  14. package/dist/codegen/ground-layer.js.map +1 -0
  15. package/dist/codegen/machines.d.ts +9 -0
  16. package/dist/codegen/machines.js +127 -0
  17. package/dist/codegen/machines.js.map +1 -0
  18. package/dist/codegen/modules.d.ts +10 -0
  19. package/dist/codegen/modules.js +40 -0
  20. package/dist/codegen/modules.js.map +1 -0
  21. package/dist/codegen/semantic-types.d.ts +14 -0
  22. package/dist/codegen/semantic-types.js +31 -0
  23. package/dist/codegen/semantic-types.js.map +1 -0
  24. package/dist/codegen/test-gen.d.ts +7 -0
  25. package/dist/codegen/test-gen.js +56 -0
  26. package/dist/codegen/test-gen.js.map +1 -0
  27. package/dist/codegen/type-system.d.ts +11 -0
  28. package/dist/codegen/type-system.js +162 -0
  29. package/dist/codegen/type-system.js.map +1 -0
  30. package/dist/codegen-core.d.ts +26 -33
  31. package/dist/codegen-core.js +58 -1367
  32. package/dist/codegen-core.js.map +1 -1
  33. package/dist/config.d.ts +20 -1
  34. package/dist/config.js +23 -3
  35. package/dist/config.js.map +1 -1
  36. package/dist/coverage-gap.js +6 -2
  37. package/dist/coverage-gap.js.map +1 -1
  38. package/dist/decompiler.d.ts +9 -0
  39. package/dist/decompiler.js +17 -2
  40. package/dist/decompiler.js.map +1 -1
  41. package/dist/errors.d.ts +5 -0
  42. package/dist/errors.js +10 -0
  43. package/dist/errors.js.map +1 -1
  44. package/dist/index.d.ts +11 -4
  45. package/dist/index.js +9 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/node-props.d.ts +253 -0
  48. package/dist/node-props.js +35 -0
  49. package/dist/node-props.js.map +1 -0
  50. package/dist/parser-core.d.ts +5 -0
  51. package/dist/parser-core.js +363 -0
  52. package/dist/parser-core.js.map +1 -0
  53. package/dist/parser-diagnostics.d.ts +14 -0
  54. package/dist/parser-diagnostics.js +31 -0
  55. package/dist/parser-diagnostics.js.map +1 -0
  56. package/dist/parser-keywords.d.ts +5 -0
  57. package/dist/parser-keywords.js +135 -0
  58. package/dist/parser-keywords.js.map +1 -0
  59. package/dist/parser-style.d.ts +3 -0
  60. package/dist/parser-style.js +73 -0
  61. package/dist/parser-style.js.map +1 -0
  62. package/dist/parser-token-stream.d.ts +27 -0
  63. package/dist/parser-token-stream.js +69 -0
  64. package/dist/parser-token-stream.js.map +1 -0
  65. package/dist/parser-tokenizer.d.ts +11 -0
  66. package/dist/parser-tokenizer.js +188 -0
  67. package/dist/parser-tokenizer.js.map +1 -0
  68. package/dist/parser.d.ts +59 -12
  69. package/dist/parser.js +51 -862
  70. package/dist/parser.js.map +1 -1
  71. package/dist/schema.d.ts +7 -2
  72. package/dist/schema.js +7 -2
  73. package/dist/schema.js.map +1 -1
  74. package/dist/source-map.d.ts +27 -0
  75. package/dist/source-map.js +82 -0
  76. package/dist/source-map.js.map +1 -0
  77. package/dist/spec.d.ts +1 -1
  78. package/dist/spec.js +2 -0
  79. package/dist/spec.js.map +1 -1
  80. package/dist/styles-tailwind.d.ts +10 -0
  81. package/dist/styles-tailwind.js +10 -0
  82. package/dist/styles-tailwind.js.map +1 -1
  83. package/dist/template-engine.d.ts +10 -5
  84. package/dist/template-engine.js +10 -5
  85. package/dist/template-engine.js.map +1 -1
  86. package/dist/types.d.ts +8 -3
  87. package/dist/utils.d.ts +20 -0
  88. package/dist/utils.js +20 -0
  89. package/dist/utils.js.map +1 -1
  90. package/dist/walk.d.ts +40 -0
  91. package/dist/walk.js +107 -0
  92. package/dist/walk.js.map +1 -0
  93. package/package.json +2 -2
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Typed prop interfaces for known IR node types.
3
+ *
4
+ * Each interface captures the props that generators actually access
5
+ * for a given node type. Unknown/evolved types fall back to Record<string, unknown>.
6
+ *
7
+ * Usage:
8
+ * const props = propsOf<'fn'>(node);
9
+ * props.name // string | undefined (no cast needed)
10
+ * props.params // string | undefined
11
+ */
12
+ import type { IRNode } from './types.js';
13
+ interface BaseProps {
14
+ name?: string;
15
+ export?: string | boolean;
16
+ confidence?: string;
17
+ }
18
+ export interface TypeProps extends BaseProps {
19
+ values?: string;
20
+ alias?: string;
21
+ }
22
+ export interface InterfaceProps extends BaseProps {
23
+ extends?: string;
24
+ }
25
+ export interface UnionProps extends BaseProps {
26
+ discriminant?: string;
27
+ }
28
+ export interface ServiceProps extends BaseProps {
29
+ implements?: string;
30
+ }
31
+ export interface ConstProps extends BaseProps {
32
+ type?: string;
33
+ value?: string;
34
+ }
35
+ export interface FnProps extends BaseProps {
36
+ params?: string;
37
+ returns?: string;
38
+ async?: string | boolean;
39
+ stream?: string | boolean;
40
+ }
41
+ export interface ErrorProps extends BaseProps {
42
+ extends?: string;
43
+ message?: string;
44
+ }
45
+ export interface MachineProps extends BaseProps {
46
+ initial?: string | boolean;
47
+ }
48
+ export interface ConfigProps extends BaseProps {
49
+ }
50
+ export interface StoreProps extends BaseProps {
51
+ path?: string;
52
+ key?: string;
53
+ model?: string;
54
+ }
55
+ export interface RepositoryProps extends BaseProps {
56
+ model?: string;
57
+ }
58
+ export interface CacheProps extends BaseProps {
59
+ backend?: string;
60
+ prefix?: string;
61
+ ttl?: string;
62
+ }
63
+ export interface DependencyProps extends BaseProps {
64
+ scope?: string;
65
+ factory?: string;
66
+ }
67
+ export interface ModelProps extends BaseProps {
68
+ table?: string;
69
+ }
70
+ export interface EventProps extends BaseProps {
71
+ payload?: string;
72
+ }
73
+ export interface OnProps extends BaseProps {
74
+ handler?: string;
75
+ key?: string;
76
+ }
77
+ export interface WebSocketProps extends BaseProps {
78
+ url?: string;
79
+ }
80
+ export interface DeriveProps extends BaseProps {
81
+ expr?: string;
82
+ type?: string;
83
+ }
84
+ export interface TransformProps extends BaseProps {
85
+ target?: string;
86
+ via?: string;
87
+ type?: string;
88
+ }
89
+ export interface ActionProps extends BaseProps {
90
+ params?: string;
91
+ returns?: string;
92
+ }
93
+ export interface GuardProps extends BaseProps {
94
+ when?: string;
95
+ message?: string;
96
+ }
97
+ export interface AssumeProps extends BaseProps {
98
+ expr?: string;
99
+ message?: string;
100
+ }
101
+ export interface InvariantProps extends BaseProps {
102
+ expr?: string;
103
+ message?: string;
104
+ }
105
+ export interface EachProps extends BaseProps {
106
+ in?: string;
107
+ index?: string;
108
+ }
109
+ export interface CollectProps extends BaseProps {
110
+ from?: string;
111
+ where?: string;
112
+ limit?: string;
113
+ order?: string;
114
+ }
115
+ export interface BranchProps extends BaseProps {
116
+ on?: string;
117
+ }
118
+ export interface ResolveProps extends BaseProps {
119
+ }
120
+ export interface ExpectProps extends BaseProps {
121
+ expr?: string;
122
+ within?: string;
123
+ max?: string;
124
+ min?: string;
125
+ }
126
+ export interface RecoverProps extends BaseProps {
127
+ }
128
+ export interface PatternProps extends BaseProps {
129
+ pattern?: string;
130
+ }
131
+ export interface ConditionalProps extends BaseProps {
132
+ if?: string | import('./types.js').ExprObject;
133
+ }
134
+ export interface SelectProps extends BaseProps {
135
+ value?: string;
136
+ placeholder?: string;
137
+ onChange?: string;
138
+ }
139
+ export interface ModuleProps extends BaseProps {
140
+ }
141
+ export interface ImportProps extends BaseProps {
142
+ from?: string;
143
+ names?: string;
144
+ types?: string | boolean;
145
+ default?: string;
146
+ }
147
+ export interface FieldProps extends BaseProps {
148
+ type?: string;
149
+ optional?: string | boolean;
150
+ default?: string;
151
+ private?: string | boolean;
152
+ }
153
+ export interface VariantProps extends BaseProps {
154
+ }
155
+ export interface MethodProps extends BaseProps {
156
+ params?: string;
157
+ returns?: string;
158
+ }
159
+ export interface TransitionProps extends BaseProps {
160
+ from?: string;
161
+ to?: string;
162
+ }
163
+ export interface StateProps extends BaseProps {
164
+ value?: string;
165
+ initial?: string | boolean;
166
+ }
167
+ export interface ColumnProps extends BaseProps {
168
+ type?: string;
169
+ primary?: string | boolean;
170
+ unique?: string | boolean;
171
+ nullable?: string | boolean;
172
+ default?: string;
173
+ optional?: string | boolean;
174
+ }
175
+ export interface RelationProps extends BaseProps {
176
+ type?: string;
177
+ model?: string;
178
+ foreignKey?: string;
179
+ target?: string;
180
+ kind?: string;
181
+ }
182
+ export interface OptionProps extends BaseProps {
183
+ value?: string;
184
+ label?: string;
185
+ }
186
+ export interface TestProps extends BaseProps {
187
+ suite?: string;
188
+ }
189
+ /** Maps known node types to their typed prop interface. */
190
+ export interface NodePropsMap {
191
+ type: TypeProps;
192
+ interface: InterfaceProps;
193
+ union: UnionProps;
194
+ service: ServiceProps;
195
+ const: ConstProps;
196
+ fn: FnProps;
197
+ error: ErrorProps;
198
+ machine: MachineProps;
199
+ config: ConfigProps;
200
+ store: StoreProps;
201
+ repository: RepositoryProps;
202
+ cache: CacheProps;
203
+ dependency: DependencyProps;
204
+ model: ModelProps;
205
+ event: EventProps;
206
+ on: OnProps;
207
+ websocket: WebSocketProps;
208
+ derive: DeriveProps;
209
+ transform: TransformProps;
210
+ action: ActionProps;
211
+ guard: GuardProps;
212
+ assume: AssumeProps;
213
+ invariant: InvariantProps;
214
+ each: EachProps;
215
+ collect: CollectProps;
216
+ branch: BranchProps;
217
+ resolve: ResolveProps;
218
+ expect: ExpectProps;
219
+ recover: RecoverProps;
220
+ pattern: PatternProps;
221
+ conditional: ConditionalProps;
222
+ select: SelectProps;
223
+ module: ModuleProps;
224
+ import: ImportProps;
225
+ field: FieldProps;
226
+ variant: VariantProps;
227
+ method: MethodProps;
228
+ transition: TransitionProps;
229
+ state: StateProps;
230
+ column: ColumnProps;
231
+ relation: RelationProps;
232
+ option: OptionProps;
233
+ test: TestProps;
234
+ }
235
+ /**
236
+ * Get typed props for a known node type. Falls back to `Record<string, unknown>`
237
+ * for custom/evolved types not in the map.
238
+ *
239
+ * @example
240
+ * ```ts
241
+ * const props = propsOf<'fn'>(node);
242
+ * props.name // string | undefined
243
+ * props.params // string | undefined
244
+ * props.returns // string | undefined
245
+ * ```
246
+ */
247
+ export declare function propsOf<T extends keyof NodePropsMap>(node: IRNode): NodePropsMap[T];
248
+ /**
249
+ * Get props as a generic record — for custom/evolved types or when the
250
+ * node type isn't known at compile time.
251
+ */
252
+ export declare function propsUntyped(node: IRNode): Record<string, unknown>;
253
+ export {};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Typed prop interfaces for known IR node types.
3
+ *
4
+ * Each interface captures the props that generators actually access
5
+ * for a given node type. Unknown/evolved types fall back to Record<string, unknown>.
6
+ *
7
+ * Usage:
8
+ * const props = propsOf<'fn'>(node);
9
+ * props.name // string | undefined (no cast needed)
10
+ * props.params // string | undefined
11
+ */
12
+ // ── Helper ──────────────────────────────────────────────────────────────
13
+ /**
14
+ * Get typed props for a known node type. Falls back to `Record<string, unknown>`
15
+ * for custom/evolved types not in the map.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const props = propsOf<'fn'>(node);
20
+ * props.name // string | undefined
21
+ * props.params // string | undefined
22
+ * props.returns // string | undefined
23
+ * ```
24
+ */
25
+ export function propsOf(node) {
26
+ return (node.props || {});
27
+ }
28
+ /**
29
+ * Get props as a generic record — for custom/evolved types or when the
30
+ * node type isn't known at compile time.
31
+ */
32
+ export function propsUntyped(node) {
33
+ return (node.props || {});
34
+ }
35
+ //# sourceMappingURL=node-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-props.js","sourceRoot":"","sources":["../src/node-props.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmSH,2EAA2E;AAE3E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAA+B,IAAY;IAChE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAoB,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;AACvD,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** @internal Core parser pipeline — line parsing, tree building, and orchestration. */
2
+ import type { ParseResult } from './types.js';
3
+ import { type KernRuntime } from './runtime.js';
4
+ /** @internal Single internal entry that wires parseLines → buildTree → computeEndSpans. */
5
+ export declare function parseInternal(source: string, asDocument: boolean, runtime?: KernRuntime): ParseResult;
@@ -0,0 +1,363 @@
1
+ import { isKnownNodeType } from './spec.js';
2
+ import { defaultRuntime } from './runtime.js';
3
+ import { createParseState, commitParseState, emitDiagnostic } from './parser-diagnostics.js';
4
+ import { tokenizeLineInternal } from './parser-tokenizer.js';
5
+ import { TokenStream } from './parser-token-stream.js';
6
+ import { parseStyleBlock } from './parser-style.js';
7
+ import { KEYWORD_HANDLERS } from './parser-keywords.js';
8
+ // ── Prop parsing ─────────────────────────────────────────────────────────
9
+ /** Map a value token to its JS representation. */
10
+ function tokenValue(tok) {
11
+ if (tok.kind === 'expr')
12
+ return { __expr: true, code: tok.value };
13
+ if (tok.kind === 'quoted')
14
+ return tok.value;
15
+ return tok.value;
16
+ }
17
+ /** Try to parse a key=value prop from the stream. Returns true if consumed. */
18
+ function parseProp(state, s, props, lineNum, col) {
19
+ if (!s.isKeyValue())
20
+ return false;
21
+ s.skipWS();
22
+ const keyTok = s.next();
23
+ const key = keyTok.value; // identifier
24
+ s.next(); // =
25
+ if (key in props) {
26
+ emitDiagnostic(state, 'DUPLICATE_PROP', 'warning', `Duplicate property '${key}' at line ${lineNum ?? 0}`, lineNum ?? 0, (col ?? 0) + keyTok.pos, {
27
+ endCol: (col ?? 0) + keyTok.pos + key.length,
28
+ });
29
+ }
30
+ const valTok = s.peek();
31
+ if (!valTok || valTok.kind === 'whitespace') {
32
+ props[key] = '';
33
+ return true;
34
+ }
35
+ // key={{expr}} or key="quoted"
36
+ if (valTok.kind === 'expr' || valTok.kind === 'quoted') {
37
+ props[key] = tokenValue(s.next());
38
+ return true;
39
+ }
40
+ // key=bareValue — collect tokens up to next WS/style/themeRef
41
+ let value = '';
42
+ while (!s.done()) {
43
+ const vt = s.peek();
44
+ if (vt.kind === 'whitespace' || vt.kind === 'style' || vt.kind === 'themeRef')
45
+ break;
46
+ value += vt.value;
47
+ s.next();
48
+ }
49
+ props[key] = value;
50
+ return true;
51
+ }
52
+ // ── parseLine ────────────────────────────────────────────────────────────
53
+ function parseLine(state, raw, lineNum, runtime = defaultRuntime) {
54
+ if (raw.trim() === '')
55
+ return null;
56
+ const indent = raw.search(/\S/);
57
+ const indentText = raw.slice(0, indent);
58
+ const content = raw.slice(indent);
59
+ const col = indent + 1;
60
+ if (indentText.includes('\t')) {
61
+ emitDiagnostic(state, 'INVALID_INDENT', 'warning', `Tab indentation at line ${lineNum}`, lineNum, 1, {
62
+ endCol: indent + 1,
63
+ });
64
+ }
65
+ const diagBefore = state.diagnostics.length;
66
+ const tokens = tokenizeLineInternal(content, state);
67
+ for (let d = diagBefore; d < state.diagnostics.length; d++) {
68
+ if (state.diagnostics[d].line === 0)
69
+ state.diagnostics[d].line = lineNum;
70
+ state.diagnostics[d].col += indent;
71
+ state.diagnostics[d].endCol += indent;
72
+ }
73
+ const s = new TokenStream(tokens);
74
+ // First token must be an identifier (the node type)
75
+ const typeToken = s.tryIdent();
76
+ if (!typeToken) {
77
+ const firstToken = tokens.find(tok => tok.kind !== 'whitespace');
78
+ if (firstToken) {
79
+ emitDiagnostic(state, 'DROPPED_LINE', 'error', `Dropped line ${lineNum}: expected a node type at the start of the line`, lineNum, col + firstToken.pos, {
80
+ endCol: col + content.length,
81
+ });
82
+ }
83
+ return null;
84
+ }
85
+ const type = typeToken;
86
+ if (!isKnownNodeType(type, runtime) && !runtime.multilineBlockTypes.has(type) && !runtime.isTemplateNode(type)) {
87
+ emitDiagnostic(state, 'UNKNOWN_NODE_TYPE', 'warning', `Unknown node type '${type}' at line ${lineNum}`, lineNum, col, {
88
+ endCol: col + type.length,
89
+ });
90
+ }
91
+ const props = {};
92
+ const styles = {};
93
+ const pseudoStyles = {};
94
+ const themeRefs = [];
95
+ // ── Evolved node parser hints (v4) ──────────────────────────────────
96
+ const evolvedHints = runtime.parserHints.get(type);
97
+ if (evolvedHints) {
98
+ if (evolvedHints.positionalArgs) {
99
+ for (const argName of evolvedHints.positionalArgs) {
100
+ const tok = s.consumeAnyValue();
101
+ if (tok)
102
+ props[argName] = tok.value;
103
+ }
104
+ }
105
+ if (evolvedHints.bareWord) {
106
+ s.skipWS();
107
+ if (!s.isKeyValue()) {
108
+ const id = s.tryIdent();
109
+ if (id)
110
+ props[evolvedHints.bareWord] = id;
111
+ }
112
+ }
113
+ }
114
+ // ── Keyword-specific handling ──────────────────────────────────────
115
+ const handler = KEYWORD_HANDLERS.get(type);
116
+ if (handler)
117
+ handler(s, props, content);
118
+ // ── Generic prop/style/theme parsing ───────────────────────────────
119
+ while (!s.done()) {
120
+ s.skipWS();
121
+ if (s.done())
122
+ break;
123
+ const tok = s.peek();
124
+ // Style block
125
+ if (tok.kind === 'style') {
126
+ parseStyleBlock(tok.value, styles, pseudoStyles);
127
+ s.next();
128
+ continue;
129
+ }
130
+ // Theme ref
131
+ if (tok.kind === 'themeRef') {
132
+ themeRefs.push(tok.value);
133
+ s.next();
134
+ continue;
135
+ }
136
+ // Key=value prop (extracted helper from Codex)
137
+ if (parseProp(state, s, props, lineNum, col))
138
+ continue;
139
+ // Unknown token — skip with warning
140
+ const skipped = s.next();
141
+ const errCol = col + skipped.pos;
142
+ emitDiagnostic(state, 'UNEXPECTED_TOKEN', 'warning', `Unexpected token "${skipped.value}" at line ${lineNum}:${errCol}`, lineNum, errCol, {
143
+ endCol: errCol + skipped.value.length,
144
+ });
145
+ }
146
+ return {
147
+ indent,
148
+ rawLength: content.length,
149
+ type,
150
+ props,
151
+ styles,
152
+ pseudoStyles,
153
+ themeRefs,
154
+ loc: { line: lineNum, col, endLine: lineNum, endCol: col + content.length },
155
+ };
156
+ }
157
+ // ── Minified source expander ─────────────────────────────────────────────
158
+ function expandMinified(source) {
159
+ if (!source.includes('(') || source.split('\n').length > 1)
160
+ return source;
161
+ const result = [];
162
+ let depth = 0;
163
+ let current = '';
164
+ let inQuote = false;
165
+ let inBraces = 0;
166
+ for (let i = 0; i < source.length; i++) {
167
+ const ch = source[i];
168
+ if (ch === '"') {
169
+ inQuote = !inQuote;
170
+ current += ch;
171
+ continue;
172
+ }
173
+ if (inQuote) {
174
+ current += ch;
175
+ continue;
176
+ }
177
+ if (ch === '{') {
178
+ inBraces++;
179
+ current += ch;
180
+ continue;
181
+ }
182
+ if (ch === '}') {
183
+ inBraces--;
184
+ current += ch;
185
+ continue;
186
+ }
187
+ if (inBraces > 0) {
188
+ current += ch;
189
+ continue;
190
+ }
191
+ if (ch === '(') {
192
+ result.push(' '.repeat(depth) + current.trim());
193
+ current = '';
194
+ depth++;
195
+ }
196
+ else if (ch === ')') {
197
+ if (current.trim())
198
+ result.push(' '.repeat(depth) + current.trim());
199
+ current = '';
200
+ depth--;
201
+ }
202
+ else if (ch === ',' && inBraces === 0) {
203
+ if (current.trim())
204
+ result.push(' '.repeat(depth) + current.trim());
205
+ current = '';
206
+ }
207
+ else {
208
+ current += ch;
209
+ }
210
+ }
211
+ if (current.trim())
212
+ result.push(' '.repeat(depth) + current.trim());
213
+ return result.join('\n');
214
+ }
215
+ // ── Multi-line block + line orchestration ────────────────────────────────
216
+ /** Process source lines into ParsedLine entries (multiline blocks + regular lines). */
217
+ function parseLines(state, source, runtime = defaultRuntime) {
218
+ const lines = expandMinified(source).split('\n');
219
+ const parsed = [];
220
+ for (let i = 0; i < lines.length; i++) {
221
+ const trimmed = lines[i].trimStart();
222
+ const multilineType = [...runtime.multilineBlockTypes].find(type => trimmed.startsWith(`${type} <<<`));
223
+ if (multilineType) {
224
+ const indent = lines[i].search(/\S/);
225
+ const codeLines = [];
226
+ const startLine = i + 1;
227
+ const blockOpen = `${multilineType} <<<`;
228
+ const afterOpen = trimmed.slice(blockOpen.length);
229
+ let closed = false;
230
+ if (afterOpen.includes('>>>')) {
231
+ closed = true;
232
+ codeLines.push(afterOpen.split('>>>')[0]);
233
+ }
234
+ else {
235
+ i++;
236
+ while (i < lines.length && !lines[i].trimStart().startsWith('>>>')) {
237
+ codeLines.push(lines[i]);
238
+ i++;
239
+ }
240
+ if (i < lines.length) {
241
+ closed = true;
242
+ const closeLine = lines[i];
243
+ const closeIdx = closeLine.indexOf('>>>');
244
+ if (closeIdx > 0) {
245
+ const before = closeLine.slice(0, closeIdx).trim();
246
+ if (before)
247
+ codeLines.push(before);
248
+ }
249
+ }
250
+ }
251
+ if (!closed) {
252
+ emitDiagnostic(state, 'UNEXPECTED_TOKEN', 'error', `Unclosed multiline block '${multilineType} <<<' at line ${startLine}`, startLine, indent + 1, {
253
+ endCol: indent + 1 + blockOpen.length,
254
+ suggestion: `Close the '${multilineType} <<<' block with a matching '>>>' marker before the file ends.`,
255
+ });
256
+ }
257
+ parsed.push({
258
+ indent,
259
+ rawLength: lines[startLine - 1].slice(indent).length,
260
+ type: multilineType,
261
+ props: { code: codeLines.join('\n').replace(/^\n+|\n+$/g, '') },
262
+ styles: {},
263
+ pseudoStyles: {},
264
+ themeRefs: [],
265
+ loc: {
266
+ line: startLine,
267
+ col: indent + 1,
268
+ endLine: startLine,
269
+ endCol: indent + 1 + lines[startLine - 1].slice(indent).length,
270
+ },
271
+ });
272
+ continue;
273
+ }
274
+ const p = parseLine(state, lines[i], i + 1, runtime);
275
+ if (p)
276
+ parsed.push(p);
277
+ }
278
+ return parsed;
279
+ }
280
+ // ── Tree building ────────────────────────────────────────────────────────
281
+ /** Convert a ParsedLine to an IRNode (no children yet). */
282
+ function toNode(p) {
283
+ const node = {
284
+ type: p.type,
285
+ loc: p.loc,
286
+ props: { ...p.props },
287
+ children: [],
288
+ };
289
+ if (Object.keys(p.styles).length > 0)
290
+ node.props.styles = p.styles;
291
+ if (Object.keys(p.pseudoStyles).length > 0)
292
+ node.props.pseudoStyles = p.pseudoStyles;
293
+ if (p.themeRefs.length > 0)
294
+ node.props.themeRefs = p.themeRefs;
295
+ return node;
296
+ }
297
+ /** Build a tree from parsed lines using indent-based stack. */
298
+ function buildTree(state, parsed, root, rootIndent) {
299
+ const stack = [{ node: root, indent: rootIndent }];
300
+ const seenIndents = new Set([rootIndent]);
301
+ for (let i = 0; i < parsed.length; i++) {
302
+ const p = parsed[i];
303
+ const node = toNode(p);
304
+ if (p.indent < (stack[stack.length - 1]?.indent ?? 0) && !seenIndents.has(p.indent)) {
305
+ emitDiagnostic(state, 'INDENT_JUMP', 'warning', `Dedent to unseen indent level ${p.indent} at line ${p.loc.line}`, p.loc.line, p.loc.col, {
306
+ endCol: p.loc.col + p.type.length,
307
+ });
308
+ }
309
+ while (stack.length > 1 && stack[stack.length - 1].indent >= p.indent) {
310
+ stack.pop();
311
+ }
312
+ seenIndents.add(p.indent);
313
+ const parent = stack[stack.length - 1].node;
314
+ if (!parent.children)
315
+ parent.children = [];
316
+ parent.children.push(node);
317
+ stack.push({ node, indent: p.indent });
318
+ }
319
+ }
320
+ /** Recursively compute endLine/endCol for each node based on its last child. */
321
+ function computeEndSpans(node) {
322
+ if (node.children && node.children.length > 0) {
323
+ for (const child of node.children)
324
+ computeEndSpans(child);
325
+ const lastChild = node.children[node.children.length - 1];
326
+ if (lastChild.loc && node.loc) {
327
+ node.loc.endLine = lastChild.loc.endLine ?? lastChild.loc.line;
328
+ node.loc.endCol = lastChild.loc.endCol ?? lastChild.loc.col;
329
+ }
330
+ }
331
+ else if (node.loc) {
332
+ node.loc.endLine = node.loc.endLine ?? node.loc.line;
333
+ node.loc.endCol = node.loc.endCol ?? node.loc.col;
334
+ }
335
+ }
336
+ // ── Core parse driver ────────────────────────────────────────────────────
337
+ /** @internal Single internal entry that wires parseLines → buildTree → computeEndSpans. */
338
+ export function parseInternal(source, asDocument, runtime) {
339
+ const rt = runtime ?? defaultRuntime;
340
+ const state = createParseState();
341
+ const parsed = parseLines(state, source, rt);
342
+ if (parsed.length === 0) {
343
+ if (source.trim() === '') {
344
+ emitDiagnostic(state, 'EMPTY_DOCUMENT', 'info', 'Source document is empty', 1, 1, { endCol: 1 });
345
+ }
346
+ const root = { type: 'document', children: [], loc: { line: 1, col: 1, endLine: 1, endCol: 1 } };
347
+ commitParseState(state, rt);
348
+ return { root, diagnostics: [...state.diagnostics] };
349
+ }
350
+ let root;
351
+ if (asDocument) {
352
+ root = { type: 'document', children: [], loc: { line: 1, col: 1 } };
353
+ buildTree(state, parsed, root, -1);
354
+ }
355
+ else {
356
+ root = toNode(parsed[0]);
357
+ buildTree(state, parsed.slice(1), root, parsed[0].indent);
358
+ }
359
+ computeEndSpans(root);
360
+ commitParseState(state, rt);
361
+ return { root, diagnostics: [...state.diagnostics] };
362
+ }
363
+ //# 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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"}