@kernlang/core 3.3.9 → 3.4.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 (82) hide show
  1. package/dist/capability-matrix.d.ts +15 -0
  2. package/dist/capability-matrix.js +245 -0
  3. package/dist/capability-matrix.js.map +1 -0
  4. package/dist/codegen/data-layer.d.ts +1 -1
  5. package/dist/codegen/data-layer.js +59 -23
  6. package/dist/codegen/data-layer.js.map +1 -1
  7. package/dist/codegen/events.js +1 -1
  8. package/dist/codegen/events.js.map +1 -1
  9. package/dist/codegen/functions.js +29 -5
  10. package/dist/codegen/functions.js.map +1 -1
  11. package/dist/codegen/ground-layer.js +10 -6
  12. package/dist/codegen/ground-layer.js.map +1 -1
  13. package/dist/codegen/helpers.d.ts +3 -1
  14. package/dist/codegen/helpers.js +5 -1
  15. package/dist/codegen/helpers.js.map +1 -1
  16. package/dist/codegen/machines.js +4 -3
  17. package/dist/codegen/machines.js.map +1 -1
  18. package/dist/codegen/modules.d.ts +1 -0
  19. package/dist/codegen/modules.js +52 -1
  20. package/dist/codegen/modules.js.map +1 -1
  21. package/dist/codegen/screens.js +31 -9
  22. package/dist/codegen/screens.js.map +1 -1
  23. package/dist/codegen/stdlib-preamble.d.ts +39 -0
  24. package/dist/codegen/stdlib-preamble.js +213 -0
  25. package/dist/codegen/stdlib-preamble.js.map +1 -0
  26. package/dist/codegen/type-system.d.ts +113 -1
  27. package/dist/codegen/type-system.js +389 -30
  28. package/dist/codegen/type-system.js.map +1 -1
  29. package/dist/codegen-core.d.ts +2 -2
  30. package/dist/codegen-core.js +58 -10
  31. package/dist/codegen-core.js.map +1 -1
  32. package/dist/codegen-expression.d.ts +3 -0
  33. package/dist/codegen-expression.js +93 -0
  34. package/dist/codegen-expression.js.map +1 -0
  35. package/dist/concepts.d.ts +3 -3
  36. package/dist/config.d.ts +16 -0
  37. package/dist/config.js +13 -0
  38. package/dist/config.js.map +1 -1
  39. package/dist/decompiler.js +356 -4
  40. package/dist/decompiler.js.map +1 -1
  41. package/dist/importer.d.ts +1 -0
  42. package/dist/importer.js +574 -34
  43. package/dist/importer.js.map +1 -1
  44. package/dist/index.d.ts +6 -3
  45. package/dist/index.js +9 -3
  46. package/dist/index.js.map +1 -1
  47. package/dist/node-props.d.ts +177 -1
  48. package/dist/node-props.js.map +1 -1
  49. package/dist/parser-core.js +30 -5
  50. package/dist/parser-core.js.map +1 -1
  51. package/dist/parser-diagnostics.js +5 -0
  52. package/dist/parser-diagnostics.js.map +1 -1
  53. package/dist/parser-expression.d.ts +17 -0
  54. package/dist/parser-expression.js +498 -0
  55. package/dist/parser-expression.js.map +1 -0
  56. package/dist/parser-tokenizer.d.ts +5 -3
  57. package/dist/parser-tokenizer.js +97 -16
  58. package/dist/parser-tokenizer.js.map +1 -1
  59. package/dist/parser-validate-effects.d.ts +21 -0
  60. package/dist/parser-validate-effects.js +188 -0
  61. package/dist/parser-validate-effects.js.map +1 -0
  62. package/dist/parser-validate-expressions.d.ts +6 -0
  63. package/dist/parser-validate-expressions.js +41 -0
  64. package/dist/parser-validate-expressions.js.map +1 -0
  65. package/dist/parser-validate-union-kind.d.ts +24 -0
  66. package/dist/parser-validate-union-kind.js +97 -0
  67. package/dist/parser-validate-union-kind.js.map +1 -0
  68. package/dist/schema.d.ts +1 -1
  69. package/dist/schema.js +373 -27
  70. package/dist/schema.js.map +1 -1
  71. package/dist/semantic-validator.js +15 -8
  72. package/dist/semantic-validator.js.map +1 -1
  73. package/dist/spec.d.ts +5 -2
  74. package/dist/spec.js +24 -2
  75. package/dist/spec.js.map +1 -1
  76. package/dist/types.d.ts +7 -1
  77. package/dist/types.js +7 -1
  78. package/dist/types.js.map +1 -1
  79. package/dist/value-ir.d.ts +69 -0
  80. package/dist/value-ir.js +20 -0
  81. package/dist/value-ir.js.map +1 -0
  82. package/package.json +1 -1
@@ -9,8 +9,87 @@ function isIdentChar(ch) {
9
9
  function isDigit(ch) {
10
10
  return ch >= '0' && ch <= '9';
11
11
  }
12
- /** @internal Character-by-character tokenizer for a single KERN line (after indent stripped). */
13
- export function tokenizeLineInternal(line, state) {
12
+ function isHexDigit(ch) {
13
+ return isDigit(ch) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F');
14
+ }
15
+ function isBinDigit(ch) {
16
+ return ch === '0' || ch === '1';
17
+ }
18
+ function isOctDigit(ch) {
19
+ return ch >= '0' && ch <= '7';
20
+ }
21
+ /** Consume digits with optional underscore separators. Underscores cannot lead, trail, or repeat. */
22
+ function consumeDigitsWithSep(line, start, isValid) {
23
+ let i = start;
24
+ let started = false;
25
+ let lastWasUnderscore = false;
26
+ while (i < line.length) {
27
+ const c = line[i];
28
+ if (isValid(c)) {
29
+ lastWasUnderscore = false;
30
+ started = true;
31
+ i++;
32
+ }
33
+ else if (c === '_' && started && !lastWasUnderscore && i + 1 < line.length && isValid(line[i + 1])) {
34
+ lastWasUnderscore = true;
35
+ i++;
36
+ }
37
+ else {
38
+ break;
39
+ }
40
+ }
41
+ return i;
42
+ }
43
+ /** Try to consume a numeric literal. Returns end position, or null if not a number. */
44
+ function tryConsumeNumber(line, start, state) {
45
+ let i = start;
46
+ const ch = line[i];
47
+ if (ch === '0' && i + 1 < line.length) {
48
+ const next = line[i + 1];
49
+ let validator = null;
50
+ if (next === 'x' || next === 'X')
51
+ validator = isHexDigit;
52
+ else if (next === 'b' || next === 'B')
53
+ validator = isBinDigit;
54
+ else if (next === 'o' || next === 'O')
55
+ validator = isOctDigit;
56
+ if (validator) {
57
+ const after = consumeDigitsWithSep(line, i + 2, validator);
58
+ if (after === i + 2)
59
+ return null;
60
+ i = after;
61
+ if (i < line.length && line[i] === 'n')
62
+ i++;
63
+ return i;
64
+ }
65
+ }
66
+ const hasIntPart = isDigit(ch);
67
+ let j = hasIntPart ? consumeDigitsWithSep(line, i, isDigit) : i;
68
+ let hasFracPart = false;
69
+ if (j < line.length && line[j] === '.' && j + 1 < line.length && isDigit(line[j + 1])) {
70
+ j++;
71
+ j = consumeDigitsWithSep(line, j, isDigit);
72
+ hasFracPart = true;
73
+ }
74
+ if (!hasIntPart && !hasFracPart)
75
+ return null;
76
+ if (!hasFracPart && j < line.length && line[j] === 'n') {
77
+ j++;
78
+ }
79
+ else if (hasFracPart && j < line.length && line[j] === 'n') {
80
+ if (state) {
81
+ emitDiagnostic(state, 'INVALID_BIGINT', 'error', 'BigInt literal cannot have a fractional part', 0, start + 1);
82
+ }
83
+ j++;
84
+ }
85
+ return j > start ? j : null;
86
+ }
87
+ /** @internal Character-by-character tokenizer for a single KERN line (after indent stripped).
88
+ * `mode` selects the lex contract; only 'line' is implemented today. */
89
+ export function tokenizeLineInternal(line, state, mode = 'line') {
90
+ if (mode !== 'line') {
91
+ throw new Error(`Lex mode '${mode}' not yet implemented`);
92
+ }
14
93
  const tokens = [];
15
94
  let i = 0;
16
95
  while (i < line.length) {
@@ -84,16 +163,17 @@ export function tokenizeLineInternal(line, state) {
84
163
  i = j;
85
164
  continue;
86
165
  }
87
- // Quoted string "..." with \" escape support
88
- if (ch === '"') {
166
+ // Quoted string "..." or '...' with \" / \' / \\ escape support
167
+ if (ch === '"' || ch === "'") {
168
+ const quote = ch;
89
169
  const start = i;
90
170
  i++;
91
171
  let inner = '';
92
- while (i < line.length && line[i] !== '"') {
172
+ while (i < line.length && line[i] !== quote) {
93
173
  if (line[i] === '\\' && i + 1 < line.length) {
94
174
  const next = line[i + 1];
95
- if (next === '"') {
96
- inner += '"';
175
+ if (next === quote) {
176
+ inner += quote;
97
177
  i += 2;
98
178
  }
99
179
  else if (next === '\\') {
@@ -150,13 +230,14 @@ export function tokenizeLineInternal(line, state) {
150
230
  tokens.push({ kind: 'slash', value: line.slice(start, i), pos: start });
151
231
  continue;
152
232
  }
153
- // Number (pure digits)
154
- if (isDigit(ch)) {
155
- const start = i;
156
- while (i < line.length && isDigit(line[i]))
157
- i++;
158
- tokens.push({ kind: 'number', value: line.slice(start, i), pos: start });
159
- continue;
233
+ // Number — int, float, hex (0x), binary (0b), octal (0o), with optional _ separators and bigint suffix (n)
234
+ if (isDigit(ch) || (ch === '.' && i + 1 < line.length && isDigit(line[i + 1]))) {
235
+ const end = tryConsumeNumber(line, i, state);
236
+ if (end !== null) {
237
+ tokens.push({ kind: 'number', value: line.slice(i, end), pos: i });
238
+ i = end;
239
+ continue;
240
+ }
160
241
  }
161
242
  // Identifier: [A-Za-z_][A-Za-z0-9_-]*
162
243
  // Handles evolved: prefix (evolved:keyword → strips prefix, returns keyword)
@@ -182,7 +263,7 @@ export function tokenizeLineInternal(line, state) {
182
263
  }
183
264
  return tokens;
184
265
  }
185
- export function tokenizeLine(line) {
186
- return tokenizeLineInternal(line);
266
+ export function tokenizeLine(line, mode = 'line') {
267
+ return tokenizeLineInternal(line, undefined, mode);
187
268
  }
188
269
  //# sourceMappingURL=parser-tokenizer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser-tokenizer.js","sourceRoot":"","sources":["../src/parser-tokenizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser-tokenizer.js","sourceRoot":"","sources":["../src/parser-tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** Slice 6 — `effects=pure` validator.
2
+ *
3
+ * Spec: docs/language/effects-pure-spec.md
4
+ *
5
+ * Walks every `fn` / `derive` / `memo` node with `effects=pure` and rejects:
6
+ * 1. `effects=...` on any other node type (allowed list is `fn|derive|memo`)
7
+ * 2. `effects=<not-pure>` (slice 6 only accepts the literal `pure`) —
8
+ * includes empty string and ExprObject `effects={{ ... }}` per spec.
9
+ * 3. `async=true` / `stream=true` combined with `effects=pure` (incompatible)
10
+ * 4. handler / cleanup / expr body containing any of the FORBIDDEN_PATTERNS,
11
+ * checked AFTER stripping comments and string literals to avoid false
12
+ * positives on commented-out code or string content.
13
+ *
14
+ * This is a static walker — same shape as the `batch=true` rejection in
15
+ * packages/terminal/src/transpiler-ink.ts. Limitations are documented in
16
+ * the spec doc and are intentional.
17
+ *
18
+ * Does NOT change codegen — bodies that pass the walker emit unchanged. */
19
+ import type { ParseState } from './parser-diagnostics.js';
20
+ import { type IRNode } from './types.js';
21
+ export declare function validateEffects(state: ParseState, root: IRNode): void;
@@ -0,0 +1,188 @@
1
+ /** Slice 6 — `effects=pure` validator.
2
+ *
3
+ * Spec: docs/language/effects-pure-spec.md
4
+ *
5
+ * Walks every `fn` / `derive` / `memo` node with `effects=pure` and rejects:
6
+ * 1. `effects=...` on any other node type (allowed list is `fn|derive|memo`)
7
+ * 2. `effects=<not-pure>` (slice 6 only accepts the literal `pure`) —
8
+ * includes empty string and ExprObject `effects={{ ... }}` per spec.
9
+ * 3. `async=true` / `stream=true` combined with `effects=pure` (incompatible)
10
+ * 4. handler / cleanup / expr body containing any of the FORBIDDEN_PATTERNS,
11
+ * checked AFTER stripping comments and string literals to avoid false
12
+ * positives on commented-out code or string content.
13
+ *
14
+ * This is a static walker — same shape as the `batch=true` rejection in
15
+ * packages/terminal/src/transpiler-ink.ts. Limitations are documented in
16
+ * the spec doc and are intentional.
17
+ *
18
+ * Does NOT change codegen — bodies that pass the walker emit unchanged. */
19
+ import { emitDiagnostic } from './parser-diagnostics.js';
20
+ import { isExprObject } from './types.js';
21
+ const ALLOWED_NODE_TYPES = new Set(['fn', 'derive', 'memo']);
22
+ /** Patterns rejected inside an `effects=pure` body.
23
+ *
24
+ * Each entry is a regex anchored on word boundaries / member-access
25
+ * punctuation. The walker reports the first match per pattern by name. */
26
+ const FORBIDDEN_PATTERNS = [
27
+ // ── I/O — Web ─────────────────────────────────────────────────────
28
+ { name: 'fetch(', pattern: /\bfetch\s*\(/ },
29
+ { name: 'XMLHttpRequest', pattern: /\bXMLHttpRequest\b/ },
30
+ { name: 'console.', pattern: /\bconsole\s*\./ },
31
+ { name: 'process.', pattern: /\bprocess\s*\./ },
32
+ // ── I/O — Filesystem ──────────────────────────────────────────────
33
+ { name: 'readFileSync', pattern: /\breadFileSync\b/ },
34
+ { name: 'writeFileSync', pattern: /\bwriteFileSync\b/ },
35
+ { name: 'readFile(', pattern: /\breadFile\s*\(/ },
36
+ { name: 'writeFile(', pattern: /\bwriteFile\s*\(/ },
37
+ { name: 'fs.', pattern: /\bfs\s*\./ },
38
+ // ── I/O — Browser storage ────────────────────────────────────────
39
+ { name: 'localStorage', pattern: /\blocalStorage\b/ },
40
+ { name: 'sessionStorage', pattern: /\bsessionStorage\b/ },
41
+ { name: 'indexedDB', pattern: /\bindexedDB\b/ },
42
+ { name: 'document.', pattern: /\bdocument\s*\./ },
43
+ { name: 'window.', pattern: /\bwindow\s*\./ },
44
+ // ── I/O — Named HTTP clients (Codex review fix) ──────────────────
45
+ // Spec lists axios/got/ky/undici explicitly — without these patterns
46
+ // the validator silently accepted `axios.get(...)` etc. as pure.
47
+ { name: 'axios.', pattern: /\baxios\s*[.(]/ },
48
+ { name: 'got(', pattern: /\bgot\s*\(/ },
49
+ { name: 'ky.', pattern: /\bky\s*[.(]/ },
50
+ { name: 'undici.', pattern: /\bundici\s*\./ },
51
+ { name: 'http.', pattern: /\bhttps?\s*\./ },
52
+ // ── Time / randomness ───────────────────────────────────────────────
53
+ { name: 'Math.random', pattern: /\bMath\.random\b/ },
54
+ { name: 'Date.now', pattern: /\bDate\.now\b/ },
55
+ { name: 'new Date()', pattern: /\bnew\s+Date\s*\(\s*\)/ },
56
+ { name: 'crypto.randomUUID', pattern: /\bcrypto\.randomUUID\b/ },
57
+ { name: 'crypto.getRandomValues', pattern: /\bcrypto\.getRandomValues\b/ },
58
+ { name: 'performance.now', pattern: /\bperformance\.now\b/ },
59
+ // ── Async / scheduling ──────────────────────────────────────────────
60
+ { name: 'await', pattern: /\bawait\b/ },
61
+ { name: '.then(', pattern: /\.then\s*\(/ },
62
+ { name: '.catch(', pattern: /\.catch\s*\(/ },
63
+ { name: '.finally(', pattern: /\.finally\s*\(/ },
64
+ { name: 'setTimeout(', pattern: /\bsetTimeout\s*\(/ },
65
+ { name: 'setInterval(', pattern: /\bsetInterval\s*\(/ },
66
+ { name: 'setImmediate(', pattern: /\bsetImmediate\s*\(/ },
67
+ { name: 'queueMicrotask(', pattern: /\bqueueMicrotask\s*\(/ },
68
+ { name: 'requestAnimationFrame(', pattern: /\brequestAnimationFrame\s*\(/ },
69
+ { name: 'requestIdleCallback(', pattern: /\brequestIdleCallback\s*\(/ },
70
+ ];
71
+ /** Strip JS comments and string literals before pattern matching.
72
+ *
73
+ * Gemini review fix: without this, a comment like `// don't call fetch()` or
74
+ * a string literal like `"console.log is forbidden"` would falsely match the
75
+ * forbidden patterns. We replace contents with empty quotes / spaces so
76
+ * positional source-map info would still survive (we don't emit that here,
77
+ * but the offset-preserving substitution is the careful default).
78
+ *
79
+ * Limitations: template literal interpolations (`${...}`) are stripped along
80
+ * with the rest of the template — a `fetch(...)` inside `${}` will not be
81
+ * detected. Pure code shouldn't be embedding effectful calls inside template
82
+ * literals; if it does, declare it impure. */
83
+ function stripCommentsAndStrings(code) {
84
+ return code
85
+ .replace(/\/\*[\s\S]*?\*\//g, (m) => ' '.repeat(m.length))
86
+ .replace(/\/\/[^\n]*/g, (m) => ' '.repeat(m.length))
87
+ .replace(/"(?:[^"\\\n]|\\.)*"/g, (m) => `"${' '.repeat(Math.max(0, m.length - 2))}"`)
88
+ .replace(/'(?:[^'\\\n]|\\.)*'/g, (m) => `'${' '.repeat(Math.max(0, m.length - 2))}'`)
89
+ .replace(/`(?:[^`\\]|\\.)*`/g, (m) => `\`${' '.repeat(Math.max(0, m.length - 2))}\``);
90
+ }
91
+ /** Extract the body code to scan for a node carrying `effects=pure`.
92
+ *
93
+ * - `fn` / `memo`: handler child's `code` prop, plus cleanup blocks (Codex
94
+ * review fix — cleanup emits into the function's `finally` and would
95
+ * otherwise let `cleanup <<< console.log(...) >>>` bypass the walker).
96
+ * - `derive`: `expr` prop value.
97
+ * - Compact `expr={{ ... }}` form on `fn` is also scanned. */
98
+ function extractExpr(value) {
99
+ if (typeof value === 'string')
100
+ return value;
101
+ if (isExprObject(value))
102
+ return value.code;
103
+ return null;
104
+ }
105
+ function extractBody(node) {
106
+ const props = node.props || {};
107
+ const parts = [];
108
+ if (node.type === 'derive' || node.type === 'fn') {
109
+ const expr = extractExpr(props.expr);
110
+ if (expr)
111
+ parts.push(expr);
112
+ }
113
+ // Code-bearing children: handler (always emitted into the body) and
114
+ // cleanup (emitted into the function's finally block on `fn`).
115
+ for (const child of node.children || []) {
116
+ if (child.type !== 'handler' && child.type !== 'cleanup')
117
+ continue;
118
+ const code = child.props?.code;
119
+ if (typeof code === 'string')
120
+ parts.push(code);
121
+ }
122
+ return parts.join('\n');
123
+ }
124
+ function describeEffectsValue(raw) {
125
+ if (typeof raw === 'string')
126
+ return raw === '' ? '<empty>' : raw;
127
+ if (isExprObject(raw))
128
+ return '<expression>';
129
+ return String(raw);
130
+ }
131
+ function validateNode(state, node) {
132
+ const props = node.props || {};
133
+ // Codex review fix: `effects` is "present" if the prop key exists at all,
134
+ // including empty string and ExprObject values. The earlier guard
135
+ // (`effects !== '' && typeof === 'string'`) silently dropped both, which
136
+ // contradicts the spec rule "anything other than `pure` errors".
137
+ const effectsRaw = props.effects;
138
+ const effectsPresent = effectsRaw !== undefined &&
139
+ (typeof effectsRaw === 'string' || isExprObject(effectsRaw) || typeof effectsRaw === 'boolean');
140
+ if (effectsPresent) {
141
+ // 1. Reject on disallowed node types — checked before value validity so
142
+ // that `effects=junk` on a `transition` still surfaces the right diagnostic.
143
+ if (!ALLOWED_NODE_TYPES.has(node.type)) {
144
+ emitDiagnostic(state, 'INVALID_EFFECTS', 'error', `\`effects=\` is only allowed on \`fn\`, \`derive\`, or \`memo\` (got \`${node.type}\`). See docs/language/effects-pure-spec.md.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
145
+ }
146
+ else if (effectsRaw !== 'pure') {
147
+ // 2. Slice 6 only accepts the literal `pure`. Empty string and
148
+ // ExprObject both land here per Codex review.
149
+ emitDiagnostic(state, 'INVALID_EFFECTS', 'error', `\`effects=${describeEffectsValue(effectsRaw)}\` is not yet supported — slice 6 only accepts the literal \`pure\`. See docs/language/effects-pure-spec.md for future extensions.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
150
+ }
151
+ else {
152
+ // effects === 'pure' on an allowed node — apply the contract checks.
153
+ // 3. Reject incompatible prop combinations.
154
+ const incompatible = [];
155
+ if (props.async === 'true' || props.async === true)
156
+ incompatible.push('async=true');
157
+ if (props.stream === 'true' || props.stream === true)
158
+ incompatible.push('stream=true');
159
+ if (incompatible.length > 0) {
160
+ emitDiagnostic(state, 'INVALID_EFFECTS', 'error', `\`effects=pure\` is incompatible with ${incompatible.join(' and ')} — drop one.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
161
+ }
162
+ else {
163
+ // 4. Body walker — reject any forbidden pattern. Strip comments and
164
+ // string literals first to avoid false positives (Gemini review fix).
165
+ const body = stripCommentsAndStrings(extractBody(node));
166
+ if (body) {
167
+ for (const { name, pattern } of FORBIDDEN_PATTERNS) {
168
+ if (pattern.test(body)) {
169
+ const nameProp = typeof props.name === 'string' ? props.name : node.type;
170
+ emitDiagnostic(state, 'INVALID_EFFECTS', 'error', `\`${node.type} name=${nameProp}\` is marked \`effects=pure\` but its body uses \`${name}\` which is not allowed in a pure function. See docs/language/effects-pure-spec.md for the full forbidden list.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
171
+ // Report the first match only — a single body usually has one
172
+ // root cause; flooding with every match adds noise.
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+ }
180
+ if (node.children) {
181
+ for (const child of node.children)
182
+ validateNode(state, child);
183
+ }
184
+ }
185
+ export function validateEffects(state, root) {
186
+ validateNode(state, root);
187
+ }
188
+ //# sourceMappingURL=parser-validate-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-validate-effects.js","sourceRoot":"","sources":["../src/parser-validate-effects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Post-parse validator: runs parseExpression on bare-string props whose
2
+ * schema kind is 'expression'. Failures become INVALID_EXPRESSION diagnostics.
3
+ * Does NOT change codegen — strings flow through unchanged on success. */
4
+ import type { ParseState } from './parser-diagnostics.js';
5
+ import { type IRNode } from './types.js';
6
+ export declare function validateExpressions(state: ParseState, root: IRNode): void;
@@ -0,0 +1,41 @@
1
+ /** Post-parse validator: runs parseExpression on bare-string props whose
2
+ * schema kind is 'expression'. Failures become INVALID_EXPRESSION diagnostics.
3
+ * Does NOT change codegen — strings flow through unchanged on success. */
4
+ import { emitDiagnostic } from './parser-diagnostics.js';
5
+ import { parseExpression } from './parser-expression.js';
6
+ import { NODE_SCHEMAS } from './schema.js';
7
+ import { isExprObject } from './types.js';
8
+ function validateNode(state, node) {
9
+ const schema = NODE_SCHEMAS[node.type];
10
+ if (schema?.props && node.props) {
11
+ const quoted = node.__quotedProps;
12
+ for (const [propName, propSchema] of Object.entries(schema.props)) {
13
+ if (propSchema.kind !== 'expression')
14
+ continue;
15
+ const val = node.props[propName];
16
+ if (typeof val !== 'string' || val === '')
17
+ continue;
18
+ if (isExprObject(val))
19
+ continue;
20
+ // Skip props whose value originated from a quoted token — those are
21
+ // string literals, not expressions, even though the schema says expression.
22
+ if (quoted?.includes(propName))
23
+ continue;
24
+ try {
25
+ parseExpression(val);
26
+ }
27
+ catch (err) {
28
+ const msg = err instanceof Error ? err.message : String(err);
29
+ emitDiagnostic(state, 'INVALID_EXPRESSION', 'error', `Invalid expression in '${propName}': ${msg}`, node.loc?.line ?? 0, node.loc?.col ?? 0, { endCol: (node.loc?.col ?? 0) + propName.length });
30
+ }
31
+ }
32
+ }
33
+ if (node.children) {
34
+ for (const child of node.children)
35
+ validateNode(state, child);
36
+ }
37
+ }
38
+ export function validateExpressions(state, root) {
39
+ validateNode(state, root);
40
+ }
41
+ //# sourceMappingURL=parser-validate-expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-validate-expressions.js","sourceRoot":"","sources":["../src/parser-validate-expressions.ts"],"names":[],"mappings":"AAAA;;2EAE2E;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAe,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,SAAS,YAAY,CAAC,KAAiB,EAAE,IAAY;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY;gBAAE,SAAS;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE;gBAAE,SAAS;YACpD,IAAI,YAAY,CAAC,GAAG,CAAC;gBAAE,SAAS;YAChC,oEAAoE;YACpE,4EAA4E;YAC5E,IAAI,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACzC,IAAI,CAAC;gBACH,eAAe,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,cAAc,CACZ,KAAK,EACL,oBAAoB,EACpB,OAAO,EACP,0BAA0B,QAAQ,MAAM,GAAG,EAAE,EAC7C,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,EACnB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAClB,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CACnD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAiB,EAAE,IAAY;IACjE,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** Slice 4 — `union kind=result|option` validator.
2
+ *
3
+ * Spec: docs/language/result-option-spec.md
4
+ *
5
+ * Walks every `union` node and rejects:
6
+ * 1. `kind=<other>` — only `result` and `option` are recognised in slice 4.
7
+ * Empty string and ExprObject `kind={{ ... }}` also error per the
8
+ * slice 6 effects pattern (the prop is a literal-only string).
9
+ * 2. `kind=result` shape — the union must declare exactly two variants
10
+ * named `ok` and `err` (either order). Any other variant set is a
11
+ * `KIND_SHAPE_VIOLATION`.
12
+ * 3. `kind=option` shape — exactly two variants named `some` and `none`.
13
+ * 4. `discriminant != 'kind'` on `kind=result|option` — the spec mandates
14
+ * `discriminant=kind` so slice 7's `?` / `!` propagation operators can
15
+ * check `r.kind === 'err'` uniformly across targets.
16
+ *
17
+ * These rules are what make the slice 4 stdlib helpers safe — `map`,
18
+ * `unwrapOr`, etc. assume `x.kind === 'ok'` / `x.value` / `x.error`. The
19
+ * schema enforces the shape so the helpers don't need defensive checks.
20
+ *
21
+ * Does NOT change codegen — unions that pass the walker emit unchanged. */
22
+ import type { ParseState } from './parser-diagnostics.js';
23
+ import { type IRNode } from './types.js';
24
+ export declare function validateUnionKind(state: ParseState, root: IRNode): void;
@@ -0,0 +1,97 @@
1
+ /** Slice 4 — `union kind=result|option` validator.
2
+ *
3
+ * Spec: docs/language/result-option-spec.md
4
+ *
5
+ * Walks every `union` node and rejects:
6
+ * 1. `kind=<other>` — only `result` and `option` are recognised in slice 4.
7
+ * Empty string and ExprObject `kind={{ ... }}` also error per the
8
+ * slice 6 effects pattern (the prop is a literal-only string).
9
+ * 2. `kind=result` shape — the union must declare exactly two variants
10
+ * named `ok` and `err` (either order). Any other variant set is a
11
+ * `KIND_SHAPE_VIOLATION`.
12
+ * 3. `kind=option` shape — exactly two variants named `some` and `none`.
13
+ * 4. `discriminant != 'kind'` on `kind=result|option` — the spec mandates
14
+ * `discriminant=kind` so slice 7's `?` / `!` propagation operators can
15
+ * check `r.kind === 'err'` uniformly across targets.
16
+ *
17
+ * These rules are what make the slice 4 stdlib helpers safe — `map`,
18
+ * `unwrapOr`, etc. assume `x.kind === 'ok'` / `x.value` / `x.error`. The
19
+ * schema enforces the shape so the helpers don't need defensive checks.
20
+ *
21
+ * Does NOT change codegen — unions that pass the walker emit unchanged. */
22
+ import { emitDiagnostic } from './parser-diagnostics.js';
23
+ import { isExprObject } from './types.js';
24
+ const VALID_KINDS = new Set(['result', 'option']);
25
+ const REQUIRED_VARIANTS = {
26
+ result: new Set(['ok', 'err']),
27
+ option: new Set(['some', 'none']),
28
+ };
29
+ function describeKindValue(raw) {
30
+ if (typeof raw === 'string')
31
+ return raw === '' ? '<empty>' : raw;
32
+ if (isExprObject(raw))
33
+ return '<expression>';
34
+ return String(raw);
35
+ }
36
+ function variantNames(node) {
37
+ const names = [];
38
+ for (const child of node.children || []) {
39
+ if (child.type !== 'variant')
40
+ continue;
41
+ const name = child.props?.name;
42
+ if (typeof name === 'string')
43
+ names.push(name);
44
+ }
45
+ return names;
46
+ }
47
+ function validateNode(state, node) {
48
+ if (node.type === 'union') {
49
+ const props = node.props || {};
50
+ const kindRaw = props.kind;
51
+ const kindPresent = kindRaw !== undefined && (typeof kindRaw === 'string' || isExprObject(kindRaw) || typeof kindRaw === 'boolean');
52
+ if (kindPresent) {
53
+ // 1. Reject any kind value other than the two recognised literals.
54
+ if (typeof kindRaw !== 'string' || !VALID_KINDS.has(kindRaw)) {
55
+ emitDiagnostic(state, 'INVALID_UNION_KIND', 'error', `\`kind=${describeKindValue(kindRaw)}\` is not a recognised union kind — slice 4 accepts \`result\` or \`option\`. See docs/language/result-option-spec.md.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
56
+ }
57
+ else {
58
+ const nameProp = typeof props.name === 'string' ? props.name : '<anonymous>';
59
+ // 4. discriminant must be `kind` — load-bearing for slice 7 propagation
60
+ // operators (they desugar to `r.kind === 'err'`). The schema does NOT
61
+ // default discriminant, and `generateUnion` falls back to `'type'` if
62
+ // missing, so a `union kind=result` without `discriminant=kind` would
63
+ // silently emit `{ type: 'ok' …}` and break the contract. Codex/Gemini
64
+ // review fix: enforce presence (not just "if present, must equal").
65
+ if (props.discriminant !== 'kind') {
66
+ const got = props.discriminant === undefined ? '<missing>' : String(props.discriminant);
67
+ emitDiagnostic(state, 'KIND_SHAPE_VIOLATION', 'error', `\`union name=${nameProp} kind=${kindRaw}\` must use \`discriminant=kind\` (got \`discriminant=${got}\`). The slice 7 \`?\` / \`!\` operators rely on this. See docs/language/result-option-spec.md.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
68
+ }
69
+ else {
70
+ // 2/3. Variant-shape check for the two recognised kinds.
71
+ // Gemini review fix: compare the SET of variant names so duplicates
72
+ // like `[ok, ok]` for kind=result are rejected (the prior `every`
73
+ // form let `length === 2 && all in required` slip through).
74
+ const required = REQUIRED_VARIANTS[kindRaw];
75
+ const found = variantNames(node);
76
+ const foundSet = new Set(found);
77
+ const sameSet = found.length === required.size &&
78
+ foundSet.size === required.size &&
79
+ [...required].every((n) => foundSet.has(n));
80
+ if (!sameSet) {
81
+ const expected = [...required].join(' / ');
82
+ const got = found.length === 0 ? '<none>' : found.join(', ');
83
+ emitDiagnostic(state, 'KIND_SHAPE_VIOLATION', 'error', `\`union name=${nameProp} kind=${kindRaw}\` must declare exactly the variants \`${expected}\` (got: ${got}). See docs/language/result-option-spec.md.`, node.loc?.line ?? 0, node.loc?.col ?? 0);
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ if (node.children) {
90
+ for (const child of node.children)
91
+ validateNode(state, child);
92
+ }
93
+ }
94
+ export function validateUnionKind(state, root) {
95
+ validateNode(state, root);
96
+ }
97
+ //# sourceMappingURL=parser-validate-union-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser-validate-union-kind.js","sourceRoot":"","sources":["../src/parser-validate-union-kind.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -18,7 +18,7 @@
18
18
  import { type KernTarget } from './config.js';
19
19
  import { type KernRuntime } from './runtime.js';
20
20
  import type { IRNode } from './types.js';
21
- export type PropKind = 'identifier' | 'typeAnnotation' | 'importPath' | 'rawExpr' | 'rawBlock' | 'string' | 'boolean' | 'number';
21
+ export type PropKind = 'identifier' | 'typeAnnotation' | 'importPath' | 'rawExpr' | 'rawBlock' | 'string' | 'boolean' | 'number' | 'expression' | 'regex';
22
22
  export interface PropSchema {
23
23
  required?: boolean;
24
24
  kind: PropKind;