@kernlang/core 3.4.0 → 3.4.2-canary.3.1.6b4cbb13

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 (59) hide show
  1. package/dist/codegen/body-ts.d.ts +68 -0
  2. package/dist/codegen/body-ts.js +233 -0
  3. package/dist/codegen/body-ts.js.map +1 -0
  4. package/dist/codegen/functions.js +19 -2
  5. package/dist/codegen/functions.js.map +1 -1
  6. package/dist/codegen/kern-stdlib.d.ts +63 -0
  7. package/dist/codegen/kern-stdlib.js +160 -0
  8. package/dist/codegen/kern-stdlib.js.map +1 -0
  9. package/dist/codegen/stdlib-preamble.d.ts +19 -0
  10. package/dist/codegen/stdlib-preamble.js +62 -4
  11. package/dist/codegen/stdlib-preamble.js.map +1 -1
  12. package/dist/codegen/type-system.js +15 -1
  13. package/dist/codegen/type-system.js.map +1 -1
  14. package/dist/codegen-core.js +7 -0
  15. package/dist/codegen-core.js.map +1 -1
  16. package/dist/codegen-expression.d.ts +8 -0
  17. package/dist/codegen-expression.js +111 -5
  18. package/dist/codegen-expression.js.map +1 -1
  19. package/dist/decompiler.js +219 -0
  20. package/dist/decompiler.js.map +1 -1
  21. package/dist/index.d.ts +14 -1
  22. package/dist/index.js +16 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/native-eligibility.d.ts +69 -0
  25. package/dist/native-eligibility.js +155 -0
  26. package/dist/native-eligibility.js.map +1 -0
  27. package/dist/node-props.d.ts +4 -0
  28. package/dist/node-props.js.map +1 -1
  29. package/dist/parser-core.d.ts +7 -1
  30. package/dist/parser-core.js +5 -2
  31. package/dist/parser-core.js.map +1 -1
  32. package/dist/parser-diagnostics.js +6 -2
  33. package/dist/parser-diagnostics.js.map +1 -1
  34. package/dist/parser-expression.d.ts +8 -3
  35. package/dist/parser-expression.js +293 -5
  36. package/dist/parser-expression.js.map +1 -1
  37. package/dist/parser-keywords.js +16 -0
  38. package/dist/parser-keywords.js.map +1 -1
  39. package/dist/parser-validate-native-eligible.d.ts +21 -0
  40. package/dist/parser-validate-native-eligible.js +46 -0
  41. package/dist/parser-validate-native-eligible.js.map +1 -0
  42. package/dist/parser-validate-propagation.d.ts +105 -0
  43. package/dist/parser-validate-propagation.js +684 -0
  44. package/dist/parser-validate-propagation.js.map +1 -0
  45. package/dist/parser.d.ts +10 -3
  46. package/dist/parser.js +11 -5
  47. package/dist/parser.js.map +1 -1
  48. package/dist/schema.js +199 -13
  49. package/dist/schema.js.map +1 -1
  50. package/dist/semantic-validator.js +9 -5
  51. package/dist/semantic-validator.js.map +1 -1
  52. package/dist/spec.d.ts +2 -2
  53. package/dist/spec.js +13 -1
  54. package/dist/spec.js.map +1 -1
  55. package/dist/types.d.ts +1 -1
  56. package/dist/value-ir.d.ts +27 -0
  57. package/dist/value-ir.js +6 -1
  58. package/dist/value-ir.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ /** Native KERN handler-body codegen — TypeScript target (slices 1–3).
2
+ *
3
+ * Walks the children of a handler with `lang=kern` and emits a TypeScript
4
+ * body string. Recognized statements:
5
+ *
6
+ * - `let name=X value="EXPR"` — `const X = EXPR;` (slice 1)
7
+ * - `return value="EXPR"` / bare `return` — `return EXPR;` (slice 1)
8
+ * - `if cond="EXPR"` / sibling `else` — `if (EXPR) { … } else { … }` (slice 2c)
9
+ *
10
+ * Statement-level propagation `?` lowers to the same hoisted shape that
11
+ * slice 7 established for raw-body propagation:
12
+ *
13
+ * const __k_t1 = await call();
14
+ * if (__k_t1.kind === 'err') return __k_t1;
15
+ * const u = __k_t1.value;
16
+ *
17
+ * Slice 3 — symmetric `{ code, imports }` shape with the Python target so
18
+ * body-emitter callers have a uniform signature regardless of language.
19
+ * TS's KERN-stdlib lowerings don't currently demand any imports (`Math` is
20
+ * global, `Set`/`Map` are global), so `imports` is typically empty. The
21
+ * `BodyEmitOptions.symbolMap` parameter is currently unused on the TS
22
+ * target — TS preserves the camelCase identifier shape end-to-end — but
23
+ * is plumbed through for parity with the Python emitter (and for any
24
+ * future TS-only renames such as reserved-word collision handling).
25
+ *
26
+ * Slice scope:
27
+ * - Result-flavored propagation only (`'err'` discriminant). Option
28
+ * propagation in native bodies is deferred to slice 8 (typecheck-driven).
29
+ * - `if` requires `cond="EXPR"`. `else` is a sibling node (no condition).
30
+ * `else if` chains land in slice 3 — for slice 2c users nest `if` inside
31
+ * the `else` branch.
32
+ *
33
+ * `gensymCounter` is local to each emit call — every handler gets its own
34
+ * fresh `__k_t1`, `__k_t2`, … sequence (same convention as slice 7).
35
+ *
36
+ * Indentation: the recursive walk threads an `indent` string so nested
37
+ * `if`/`else` branches indent correctly. The caller adds the leading indent
38
+ * for the surrounding function body. */
39
+ import type { IRNode } from '../types.js';
40
+ /** Slice 3e — caller-provided options, parity with the Python body emitter.
41
+ * `symbolMap` is currently unused on the TS target; reserved for future
42
+ * use (e.g., reserved-word renames). */
43
+ export interface BodyEmitOptions {
44
+ symbolMap?: Record<string, string>;
45
+ }
46
+ /** Slice 3e — public return shape, parity with the Python body emitter.
47
+ * TS's KERN-stdlib lowerings don't currently demand any imports; the
48
+ * `imports` set will typically be empty until a future slice introduces
49
+ * TS-stdlib entries with `requires.ts` (e.g., a `node:crypto` import). */
50
+ export interface BodyEmitResult {
51
+ code: string;
52
+ imports: Set<string>;
53
+ }
54
+ /** Emit the body of a native KERN handler as TypeScript source. Returns
55
+ * the joined body text. Each top-level line is unindented; nested
56
+ * branches indent by 2 spaces per level.
57
+ *
58
+ * Legacy slice 1/2 signature — returns just the code string. Callers
59
+ * that also need the import set (slice 3b parity with Python) should
60
+ * use `emitNativeKernBodyTSWithImports`. */
61
+ export declare function emitNativeKernBodyTS(handlerNode: IRNode, options?: BodyEmitOptions): string;
62
+ /** Slice 3e — context-aware variant returning `{ code, imports }`.
63
+ * TS's KERN-stdlib lowerings don't currently demand any imports; the
64
+ * `imports` set will typically be empty until a future slice introduces
65
+ * TS-stdlib entries with `requires.ts` (e.g., a `node:crypto` import).
66
+ * Provided for symmetry with the Python target so generators that drive
67
+ * both languages have a uniform call shape. */
68
+ export declare function emitNativeKernBodyTSWithImports(handlerNode: IRNode, _options?: BodyEmitOptions): BodyEmitResult;
@@ -0,0 +1,233 @@
1
+ /** Native KERN handler-body codegen — TypeScript target (slices 1–3).
2
+ *
3
+ * Walks the children of a handler with `lang=kern` and emits a TypeScript
4
+ * body string. Recognized statements:
5
+ *
6
+ * - `let name=X value="EXPR"` — `const X = EXPR;` (slice 1)
7
+ * - `return value="EXPR"` / bare `return` — `return EXPR;` (slice 1)
8
+ * - `if cond="EXPR"` / sibling `else` — `if (EXPR) { … } else { … }` (slice 2c)
9
+ *
10
+ * Statement-level propagation `?` lowers to the same hoisted shape that
11
+ * slice 7 established for raw-body propagation:
12
+ *
13
+ * const __k_t1 = await call();
14
+ * if (__k_t1.kind === 'err') return __k_t1;
15
+ * const u = __k_t1.value;
16
+ *
17
+ * Slice 3 — symmetric `{ code, imports }` shape with the Python target so
18
+ * body-emitter callers have a uniform signature regardless of language.
19
+ * TS's KERN-stdlib lowerings don't currently demand any imports (`Math` is
20
+ * global, `Set`/`Map` are global), so `imports` is typically empty. The
21
+ * `BodyEmitOptions.symbolMap` parameter is currently unused on the TS
22
+ * target — TS preserves the camelCase identifier shape end-to-end — but
23
+ * is plumbed through for parity with the Python emitter (and for any
24
+ * future TS-only renames such as reserved-word collision handling).
25
+ *
26
+ * Slice scope:
27
+ * - Result-flavored propagation only (`'err'` discriminant). Option
28
+ * propagation in native bodies is deferred to slice 8 (typecheck-driven).
29
+ * - `if` requires `cond="EXPR"`. `else` is a sibling node (no condition).
30
+ * `else if` chains land in slice 3 — for slice 2c users nest `if` inside
31
+ * the `else` branch.
32
+ *
33
+ * `gensymCounter` is local to each emit call — every handler gets its own
34
+ * fresh `__k_t1`, `__k_t2`, … sequence (same convention as slice 7).
35
+ *
36
+ * Indentation: the recursive walk threads an `indent` string so nested
37
+ * `if`/`else` branches indent correctly. The caller adds the leading indent
38
+ * for the surrounding function body. */
39
+ import { emitExpression } from '../codegen-expression.js';
40
+ import { parseExpression } from '../parser-expression.js';
41
+ const INDENT_STEP = ' ';
42
+ /** Emit the body of a native KERN handler as TypeScript source. Returns
43
+ * the joined body text. Each top-level line is unindented; nested
44
+ * branches indent by 2 spaces per level.
45
+ *
46
+ * Legacy slice 1/2 signature — returns just the code string. Callers
47
+ * that also need the import set (slice 3b parity with Python) should
48
+ * use `emitNativeKernBodyTSWithImports`. */
49
+ export function emitNativeKernBodyTS(handlerNode, options) {
50
+ return emitNativeKernBodyTSWithImports(handlerNode, options).code;
51
+ }
52
+ /** Slice 3e — context-aware variant returning `{ code, imports }`.
53
+ * TS's KERN-stdlib lowerings don't currently demand any imports; the
54
+ * `imports` set will typically be empty until a future slice introduces
55
+ * TS-stdlib entries with `requires.ts` (e.g., a `node:crypto` import).
56
+ * Provided for symmetry with the Python target so generators that drive
57
+ * both languages have a uniform call shape. */
58
+ export function emitNativeKernBodyTSWithImports(handlerNode, _options) {
59
+ const ctx = { gensymCounter: 0, tryDepth: 0 };
60
+ const code = emitChildrenTS(handlerNode.children ?? [], ctx, '').join('\n');
61
+ return { code, imports: new Set() };
62
+ }
63
+ function emitChildrenTS(children, ctx, indent) {
64
+ const lines = [];
65
+ for (let i = 0; i < children.length; i++) {
66
+ const child = children[i];
67
+ if (child.type === 'let') {
68
+ for (const line of emitLetTS(child, ctx))
69
+ lines.push(`${indent}${line}`);
70
+ }
71
+ else if (child.type === 'return') {
72
+ for (const line of emitReturnTS(child, ctx))
73
+ lines.push(`${indent}${line}`);
74
+ }
75
+ else if (child.type === 'if') {
76
+ const condRaw = String(child.props?.cond ?? '');
77
+ const condIR = parseExpression(condRaw);
78
+ // Slice-2 review fix: propagation `?` in an `if` condition has no
79
+ // sensible single-line lowering; reject early with a clear message
80
+ // pointing users at the let-bind workaround.
81
+ if (condIR.kind === 'propagate') {
82
+ throw new Error("Propagation '?' is not allowed in `if cond=` — bind the call to a `let` first, then test the bound name.");
83
+ }
84
+ lines.push(`${indent}if (${emitExpression(condIR)}) {`);
85
+ for (const sl of emitChildrenTS(child.children ?? [], ctx, indent + INDENT_STEP))
86
+ lines.push(sl);
87
+ const next = children[i + 1];
88
+ if (next && next.type === 'else') {
89
+ lines.push(`${indent}} else {`);
90
+ for (const el of emitChildrenTS(next.children ?? [], ctx, indent + INDENT_STEP))
91
+ lines.push(el);
92
+ i++;
93
+ }
94
+ lines.push(`${indent}}`);
95
+ }
96
+ else if (child.type === 'else') {
97
+ // Slice-2 review fix: orphan `else` (without a preceding `if` sibling)
98
+ // is a structural error — silently dropping it produced confusing
99
+ // miscompiles. The `if` arm above consumes its paired `else` via i++,
100
+ // so reaching one here means it was orphaned.
101
+ throw new Error('`else` must immediately follow an `if` sibling. Found orphan `else` in handler body.');
102
+ }
103
+ else if (child.type === 'try') {
104
+ // Slice 4c — try/catch control flow.
105
+ //
106
+ // Slice 5a deferred-fix (Codex P2-2): the schema declares
107
+ // `try.allowedChildren = ['step', 'handler', 'catch']` — `catch` is a
108
+ // CHILD of `try`, NOT a sibling. The previous body-emit read `catch`
109
+ // as a sibling, which (a) put it out of step with the validator
110
+ // (schema-compliant `try { catch { … } }` shape couldn't body-emit at
111
+ // all because validator rejected the legacy sibling shape first) and
112
+ // (b) silently mis-handled schema-compliant source if the validator
113
+ // was bypassed. Read child `catch` here to match the schema; treat
114
+ // legacy sibling shape as orphan since callers writing schema-valid
115
+ // IR will never emit it.
116
+ const tryChildren = child.children ?? [];
117
+ const catchIdx = tryChildren.findIndex((c) => c.type === 'catch');
118
+ if (catchIdx === -1) {
119
+ throw new Error('`try` must contain a `catch` child. Found orphan `try` in handler body.');
120
+ }
121
+ const catchNode = tryChildren[catchIdx];
122
+ const tryBlockChildren = tryChildren.filter((c) => c.type !== 'catch');
123
+ // Slice 5a deferred-fix (Codex): the schema allows `step` and `handler`
124
+ // as `try` children for the *async orchestration* form (`try name=…`),
125
+ // not for body-statement try/catch. Body-emit only knows how to emit
126
+ // body-statements (let/return/if/each/throw/nested try). Reject the
127
+ // orchestration-only nodes loudly instead of silently dropping them
128
+ // through the unmatched-child path in emitChildrenTS.
129
+ const orchestrationChild = tryBlockChildren.find((c) => c.type === 'step' || c.type === 'handler');
130
+ if (orchestrationChild) {
131
+ throw new Error(`\`${orchestrationChild.type}\` is only valid inside an async-orchestration \`try name=…\` block, not inside a body-statement \`try\`. Move the steps into the surrounding fn or use a structured orchestration block.`);
132
+ }
133
+ lines.push(`${indent}try {`);
134
+ ctx.tryDepth++;
135
+ for (const sl of emitChildrenTS(tryBlockChildren, ctx, indent + INDENT_STEP))
136
+ lines.push(sl);
137
+ ctx.tryDepth--;
138
+ const errName = String(catchNode.props?.name ?? 'e');
139
+ lines.push(`${indent}} catch (${errName}) {`);
140
+ for (const cl of emitChildrenTS(catchNode.children ?? [], ctx, indent + INDENT_STEP))
141
+ lines.push(cl);
142
+ lines.push(`${indent}}`);
143
+ }
144
+ else if (child.type === 'catch') {
145
+ throw new Error('`catch` must be a child of `try`. Found top-level `catch` in handler body.');
146
+ }
147
+ else if (child.type === 'throw') {
148
+ // Slice 4c — throw statement.
149
+ for (const line of emitThrowTS(child, ctx))
150
+ lines.push(`${indent}${line}`);
151
+ }
152
+ else if (child.type === 'each') {
153
+ // Slice 4d — each loop.
154
+ // Slice 4c+4d review fix (Codex P1): the schema's `each` already
155
+ // declares `name` (binding) and `in` (iterable expression). The
156
+ // earlier slice-4d body-emit read `list`/`as` instead, which meant
157
+ // (a) schema-validated source `each name=x in=items` fell back to
158
+ // `for (const item of [])` (empty list, wrong binding) and
159
+ // (b) tests that used `list`/`as` failed schema validation.
160
+ // Read schema-compliant `name`/`in` first; accept legacy
161
+ // `list`/`as` as a fallback for tests that pre-date this fix.
162
+ const listRaw = String(child.props?.in ?? child.props?.list ?? '[]');
163
+ const asName = String(child.props?.name ?? child.props?.as ?? 'item');
164
+ const listIR = parseExpression(listRaw);
165
+ lines.push(`${indent}for (const ${asName} of ${emitExpression(listIR)}) {`);
166
+ for (const sl of emitChildrenTS(child.children ?? [], ctx, indent + INDENT_STEP))
167
+ lines.push(sl);
168
+ lines.push(`${indent}}`);
169
+ }
170
+ // Other child types fall through silently — slice 3 adds more.
171
+ }
172
+ return lines;
173
+ }
174
+ /** Slice 4c review fix (OpenCode + Gemini critical) — propagation `?`
175
+ * inside a `try` block has no clean lowering. The hoisted err-branch
176
+ * emits `return tmp` which exits the function entirely, BYPASSING the
177
+ * enclosing `catch`. That's almost never what users mean — they wrote
178
+ * `?` to flag a Result.err and (presumably) to let the catch handle
179
+ * it. Reject at codegen with a let-bind hint. Same shape as
180
+ * slice-2's reject-`?`-in-`if-cond` rule. */
181
+ function rejectPropagationInsideTry(ctx) {
182
+ if (ctx.tryDepth > 0) {
183
+ throw new Error("Propagation '?' is not allowed inside a `try` block — `return` from the err branch exits the function and bypasses the enclosing `catch`. " +
184
+ 'Bind the call to a `let` outside the try, then use `if x.kind === "err" throw new Error(...)` inside the try, OR use raw `lang=ts`/`lang=python` for the affected handler.');
185
+ }
186
+ }
187
+ function emitLetTS(node, ctx) {
188
+ const props = (node.props ?? {});
189
+ const name = String(props.name ?? '_');
190
+ const rawValue = props.value;
191
+ if (rawValue === undefined || rawValue === '') {
192
+ return [`const ${name} = undefined;`];
193
+ }
194
+ const valueIR = parseExpression(String(rawValue));
195
+ if (valueIR.kind === 'propagate' && valueIR.op === '?') {
196
+ rejectPropagationInsideTry(ctx);
197
+ const tmp = `__k_t${++ctx.gensymCounter}`;
198
+ const inner = emitExpression(valueIR.argument);
199
+ return [`const ${tmp} = ${inner};`, `if (${tmp}.kind === 'err') return ${tmp};`, `const ${name} = ${tmp}.value;`];
200
+ }
201
+ return [`const ${name} = ${emitExpression(valueIR)};`];
202
+ }
203
+ function emitReturnTS(node, ctx) {
204
+ const props = (node.props ?? {});
205
+ const rawValue = props.value;
206
+ if (rawValue === undefined || rawValue === '') {
207
+ return [`return;`];
208
+ }
209
+ const valueIR = parseExpression(String(rawValue));
210
+ if (valueIR.kind === 'propagate' && valueIR.op === '?') {
211
+ rejectPropagationInsideTry(ctx);
212
+ const tmp = `__k_t${++ctx.gensymCounter}`;
213
+ const inner = emitExpression(valueIR.argument);
214
+ return [`const ${tmp} = ${inner};`, `if (${tmp}.kind === 'err') return ${tmp};`, `return ${tmp}.value;`];
215
+ }
216
+ return [`return ${emitExpression(valueIR)};`];
217
+ }
218
+ function emitThrowTS(node, ctx) {
219
+ const props = (node.props ?? {});
220
+ const rawValue = props.value;
221
+ if (rawValue === undefined || rawValue === '') {
222
+ return [`throw new Error();`];
223
+ }
224
+ const valueIR = parseExpression(String(rawValue));
225
+ if (valueIR.kind === 'propagate' && valueIR.op === '?') {
226
+ rejectPropagationInsideTry(ctx);
227
+ const tmp = `__k_t${++ctx.gensymCounter}`;
228
+ const inner = emitExpression(valueIR.argument);
229
+ return [`const ${tmp} = ${inner};`, `if (${tmp}.kind === 'err') return ${tmp};`, `throw ${tmp}.value;`];
230
+ }
231
+ return [`throw ${emitExpression(valueIR)};`];
232
+ }
233
+ //# sourceMappingURL=body-ts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-ts.js","sourceRoot":"","sources":["../../src/codegen/body-ts.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,26 @@
4
4
  * Extracted from codegen-core.ts for modular codegen architecture.
5
5
  */
6
6
  import { propsOf } from '../node-props.js';
7
+ import { emitNativeKernBodyTS } from './body-ts.js';
7
8
  import { emitIdentifier, emitTypeAnnotation } from './emitters.js';
8
9
  import { dedent, emitDocComment, exportPrefix, getChildren, getFirstChild, getProps, handlerCode } from './helpers.js';
9
10
  import { emitParamList } from './type-system.js';
11
+ /** Slice 1 — native KERN handler bodies (`handler lang=kern`).
12
+ * Returns the emitted body when the fn's handler child opts in via `lang=kern`,
13
+ * otherwise returns the legacy raw `<<<…>>>` body via `handlerCode`.
14
+ *
15
+ * Slice 3e — `emitNativeKernBodyTS` returns `{ code, imports }` for parity
16
+ * with the Python target. TS body emit currently never populates `imports`
17
+ * (Math/Map/Set are global, no module-level wiring needed yet), so we just
18
+ * unwrap `code`. Future TS-stdlib entries declaring `requires.ts` would
19
+ * need this caller to inject the imports above the function declaration. */
20
+ function fnBodyCode(node) {
21
+ const handler = getFirstChild(node, 'handler');
22
+ if (handler && getProps(handler).lang === 'kern') {
23
+ return emitNativeKernBodyTS(handler);
24
+ }
25
+ return handlerCode(node);
26
+ }
10
27
  const p = getProps;
11
28
  const kids = getChildren;
12
29
  const firstChild = getFirstChild;
@@ -52,7 +69,7 @@ export function generateFunction(node) {
52
69
  const yieldType = emitTypeAnnotation(returns, 'unknown', node);
53
70
  // If user already declared AsyncGenerator<...>, use as-is to avoid double-wrapping
54
71
  const retClause = yieldType.startsWith('AsyncGenerator<') ? `: ${yieldType}` : `: AsyncGenerator<${yieldType}>`;
55
- const code = handlerCode(node);
72
+ const code = fnBodyCode(node);
56
73
  lines.push(`${exp}async function* ${name}${generics}(${paramList})${retClause} {`);
57
74
  if (code) {
58
75
  for (const line of code.split('\n')) {
@@ -74,7 +91,7 @@ export function generateFunction(node) {
74
91
  ? `: ${emitTypeAnnotation(returns, 'unknown', node)}`
75
92
  : '';
76
93
  const asyncKw = isAsync ? 'async ' : '';
77
- const code = handlerCode(node);
94
+ const code = fnBodyCode(node);
78
95
  const signalNode = firstChild(node, 'signal');
79
96
  const cleanupNode = firstChild(node, 'cleanup');
80
97
  const hasSignal = !!signalNode;
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/codegen/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/codegen/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /** KERN-stdlib lowering table — slices 2a + 2b.
2
+ *
3
+ * Per the brainstorm-locked design, KERN handler bodies use module-prefixed
4
+ * function calls (`Text.upper(s)`) instead of method dispatch (`s.upper()`).
5
+ * This table maps each KERN-stdlib operation to its per-target template so
6
+ * the SAME KERN source emits idiomatic TS and idiomatic Python.
7
+ *
8
+ * Template shape: each entry's `ts` and `py` fields are template strings
9
+ * with `$0`, `$1`, … placeholders that reference call args by zero-based
10
+ * position. The template is a string (not a structured shape) because the
11
+ * cross-target divergence is irregular enough that any structured shape
12
+ * ends up being "string with knobs". Concrete divergence cases:
13
+ * - `Text.includes(s, sub)` → TS `s.includes(sub)` vs Python `sub in s`
14
+ * (operator, not method)
15
+ * - `List.isEmpty(xs)` → TS `xs.length === 0` vs Python `len(xs) == 0`
16
+ * (compound binop expressions, not method/prop)
17
+ * - `List.join(xs, sep)` → TS `xs.join(sep)` vs Python `sep.join(xs)`
18
+ * (receiver inverted)
19
+ * - `List.last(xs)` → TS `xs[xs.length - 1]` vs Python `xs[-1]`
20
+ * (different subscript expressions)
21
+ * - `Number.floor(n)` → TS `Math.floor(n)` vs Python `math.floor(n)`
22
+ * (different module qualification)
23
+ * Templates handle all of these uniformly.
24
+ *
25
+ * Slices in this table:
26
+ * - 2a: Text upper/lower/length/trim
27
+ * - 2b: Text+ (includes, startsWith, endsWith, split, replace);
28
+ * List (length, isEmpty, includes, first, last, indexOf, join);
29
+ * Map (has, get, size); Number (round, floor, ceil, abs).
30
+ * Future slices may extend further (List.map / List.filter need closures,
31
+ * so they're deferred until closure support — currently never).
32
+ *
33
+ * Diagnostic: when codegen sees `<KnownModule>.<unknownMethod>(...)`, it
34
+ * throws with a Levenshtein did-you-mean. Calls into modules NOT in this
35
+ * table fall through to the default emit path (passthrough). */
36
+ export interface StdlibEntry {
37
+ arity: number;
38
+ ts: string;
39
+ py: string;
40
+ /** Slice 3b — per-target imports required when this lowering is used.
41
+ * The body emitter collects these into a per-handler import set so the
42
+ * generator can emit `import math` (etc.) at the top of the function
43
+ * body. Keys are target names ('ts' / 'py'); values are the import
44
+ * identifier (`'math'` ⇒ `import math`). Undefined when none required. */
45
+ requires?: {
46
+ ts?: string;
47
+ py?: string;
48
+ };
49
+ }
50
+ export declare const KERN_STDLIB: Record<string, Record<string, StdlibEntry>>;
51
+ export declare const KERN_STDLIB_MODULES: Set<string>;
52
+ /** Look up a stdlib lowering by module + method name.
53
+ * Returns null if the module is unknown OR the method is unknown on a known
54
+ * module — callers should distinguish via `KERN_STDLIB_MODULES.has(module)`
55
+ * to surface the right diagnostic. */
56
+ export declare function lookupStdlib(module: string, method: string): StdlibEntry | null;
57
+ /** Suggest the closest method name on a known module via simple Levenshtein
58
+ * membership. Used in error messages. Returns null if no close match exists. */
59
+ export declare function suggestStdlibMethod(module: string, method: string): string | null;
60
+ /** Substitute `$0`, `$1`, … placeholders in a template with the corresponding
61
+ * args. Throws on out-of-range index — that's a programming error in the
62
+ * KERN_STDLIB table, not user input. */
63
+ export declare function applyTemplate(template: string, args: string[]): string;
@@ -0,0 +1,160 @@
1
+ /** KERN-stdlib lowering table — slices 2a + 2b.
2
+ *
3
+ * Per the brainstorm-locked design, KERN handler bodies use module-prefixed
4
+ * function calls (`Text.upper(s)`) instead of method dispatch (`s.upper()`).
5
+ * This table maps each KERN-stdlib operation to its per-target template so
6
+ * the SAME KERN source emits idiomatic TS and idiomatic Python.
7
+ *
8
+ * Template shape: each entry's `ts` and `py` fields are template strings
9
+ * with `$0`, `$1`, … placeholders that reference call args by zero-based
10
+ * position. The template is a string (not a structured shape) because the
11
+ * cross-target divergence is irregular enough that any structured shape
12
+ * ends up being "string with knobs". Concrete divergence cases:
13
+ * - `Text.includes(s, sub)` → TS `s.includes(sub)` vs Python `sub in s`
14
+ * (operator, not method)
15
+ * - `List.isEmpty(xs)` → TS `xs.length === 0` vs Python `len(xs) == 0`
16
+ * (compound binop expressions, not method/prop)
17
+ * - `List.join(xs, sep)` → TS `xs.join(sep)` vs Python `sep.join(xs)`
18
+ * (receiver inverted)
19
+ * - `List.last(xs)` → TS `xs[xs.length - 1]` vs Python `xs[-1]`
20
+ * (different subscript expressions)
21
+ * - `Number.floor(n)` → TS `Math.floor(n)` vs Python `math.floor(n)`
22
+ * (different module qualification)
23
+ * Templates handle all of these uniformly.
24
+ *
25
+ * Slices in this table:
26
+ * - 2a: Text upper/lower/length/trim
27
+ * - 2b: Text+ (includes, startsWith, endsWith, split, replace);
28
+ * List (length, isEmpty, includes, first, last, indexOf, join);
29
+ * Map (has, get, size); Number (round, floor, ceil, abs).
30
+ * Future slices may extend further (List.map / List.filter need closures,
31
+ * so they're deferred until closure support — currently never).
32
+ *
33
+ * Diagnostic: when codegen sees `<KnownModule>.<unknownMethod>(...)`, it
34
+ * throws with a Levenshtein did-you-mean. Calls into modules NOT in this
35
+ * table fall through to the default emit path (passthrough). */
36
+ export const KERN_STDLIB = {
37
+ Text: {
38
+ upper: { arity: 1, ts: '$0.toUpperCase()', py: '$0.upper()' },
39
+ lower: { arity: 1, ts: '$0.toLowerCase()', py: '$0.lower()' },
40
+ length: { arity: 1, ts: '$0.length', py: 'len($0)' },
41
+ trim: { arity: 1, ts: '$0.trim()', py: '$0.strip()' },
42
+ includes: { arity: 2, ts: '$0.includes($1)', py: '$1 in $0' },
43
+ startsWith: { arity: 2, ts: '$0.startsWith($1)', py: '$0.startswith($1)' },
44
+ endsWith: { arity: 2, ts: '$0.endsWith($1)', py: '$0.endswith($1)' },
45
+ split: { arity: 2, ts: '$0.split($1)', py: '$0.split($1)' },
46
+ // Slice-2 review fix: replace-all is the canonical KERN semantics. JS
47
+ // `replace` only swaps the first match; KERN normalizes to TS
48
+ // `replaceAll` (ES2021+) and Python `replace` (default replace-all).
49
+ replace: { arity: 3, ts: '$0.replaceAll($1, $2)', py: '$0.replace($1, $2)' },
50
+ },
51
+ List: {
52
+ length: { arity: 1, ts: '$0.length', py: 'len($0)' },
53
+ isEmpty: { arity: 1, ts: '$0.length === 0', py: 'len($0) == 0' },
54
+ includes: { arity: 2, ts: '$0.includes($1)', py: '$1 in $0' },
55
+ first: { arity: 1, ts: '$0[0]', py: '$0[0]' },
56
+ // Slice-2 review fix: `$0[$0.length - 1]` evaluated `$0` twice; if `$0`
57
+ // is a function call, that's a double-evaluation bug. `.at(-1)` is
58
+ // ES2022+ and matches Python's `[-1]` semantics (single eval, supports
59
+ // negative index).
60
+ last: { arity: 1, ts: '$0.at(-1)', py: '$0[-1]' },
61
+ // Slice-2 review fix: Python `list.index` raises ValueError when the
62
+ // item isn't found; TS `indexOf` returns -1. Match TS by guarding with
63
+ // a containment check.
64
+ indexOf: { arity: 2, ts: '$0.indexOf($1)', py: '($0.index($1) if $1 in $0 else -1)' },
65
+ // Slice-2 review fix: Python `str.join` requires string elements. Wrap
66
+ // with `map(str, …)` so non-string KERN values stringify like JS does.
67
+ join: { arity: 2, ts: '$0.join($1)', py: '$1.join(map(str, $0))' },
68
+ },
69
+ Map: {
70
+ has: { arity: 2, ts: '$0.has($1)', py: '$1 in $0' },
71
+ // Slice-2 review fix: TS `Map.get(k)` returns `undefined` for missing
72
+ // keys. Python `dict[k]` raises KeyError. Use `.get($1)` (Python dicts'
73
+ // safe-access, returns None) for parity.
74
+ get: { arity: 2, ts: '$0.get($1)', py: '$0.get($1)' },
75
+ size: { arity: 1, ts: '$0.size', py: 'len($0)' },
76
+ },
77
+ Number: {
78
+ // Slice 3c — JS `Math.round` rounds half toward +∞ (so Math.round(-1.5) === -1
79
+ // and Math.round(2.5) === 3). Python's built-in `round` is banker's rounding
80
+ // (half-to-even), which diverges on `.5` values. To preserve the JS-flavored
81
+ // KERN AST semantics on the Python target, lower to `math.floor($0 + 0.5)`
82
+ // — a one-line identity that matches JS `Math.round` parity for both
83
+ // positive and negative half-cases. Single-eval because `$0` is substituted
84
+ // once.
85
+ // Slice 3 review fix (Gemini): use `__k_math` alias to avoid shadowing
86
+ // when the user has a body-local binding or param named `math`. The
87
+ // FastAPI generator emits `import math as __k_math` for any handler
88
+ // that references these.
89
+ round: { arity: 1, ts: 'Math.round($0)', py: '__k_math.floor($0 + 0.5)', requires: { py: 'math' } },
90
+ floor: { arity: 1, ts: 'Math.floor($0)', py: '__k_math.floor($0)', requires: { py: 'math' } },
91
+ ceil: { arity: 1, ts: 'Math.ceil($0)', py: '__k_math.ceil($0)', requires: { py: 'math' } },
92
+ abs: { arity: 1, ts: 'Math.abs($0)', py: 'abs($0)' },
93
+ },
94
+ };
95
+ export const KERN_STDLIB_MODULES = new Set(Object.keys(KERN_STDLIB));
96
+ /** Look up a stdlib lowering by module + method name.
97
+ * Returns null if the module is unknown OR the method is unknown on a known
98
+ * module — callers should distinguish via `KERN_STDLIB_MODULES.has(module)`
99
+ * to surface the right diagnostic. */
100
+ export function lookupStdlib(module, method) {
101
+ const moduleEntries = KERN_STDLIB[module];
102
+ if (!moduleEntries)
103
+ return null;
104
+ return moduleEntries[method] ?? null;
105
+ }
106
+ /** Suggest the closest method name on a known module via simple Levenshtein
107
+ * membership. Used in error messages. Returns null if no close match exists. */
108
+ export function suggestStdlibMethod(module, method) {
109
+ const moduleEntries = KERN_STDLIB[module];
110
+ if (!moduleEntries)
111
+ return null;
112
+ const candidates = Object.keys(moduleEntries);
113
+ let best = null;
114
+ let bestDist = Infinity;
115
+ for (const c of candidates) {
116
+ const d = levenshtein(method, c);
117
+ if (d < bestDist) {
118
+ bestDist = d;
119
+ best = c;
120
+ }
121
+ }
122
+ return bestDist <= 2 ? best : null;
123
+ }
124
+ /** Substitute `$0`, `$1`, … placeholders in a template with the corresponding
125
+ * args. Throws on out-of-range index — that's a programming error in the
126
+ * KERN_STDLIB table, not user input. */
127
+ export function applyTemplate(template, args) {
128
+ return template.replace(/\$(\d+)/g, (_match, idxStr) => {
129
+ const idx = Number.parseInt(idxStr, 10);
130
+ if (idx < 0 || idx >= args.length) {
131
+ throw new Error(`KERN-stdlib template references arg index $${idx} but only ${args.length} args provided. Template: ${template}`);
132
+ }
133
+ return args[idx];
134
+ });
135
+ }
136
+ function levenshtein(a, b) {
137
+ if (a === b)
138
+ return 0;
139
+ const m = a.length;
140
+ const n = b.length;
141
+ if (m === 0)
142
+ return n;
143
+ if (n === 0)
144
+ return m;
145
+ const dp = new Array(n + 1);
146
+ for (let j = 0; j <= n; j++)
147
+ dp[j] = j;
148
+ for (let i = 1; i <= m; i++) {
149
+ let prev = dp[0];
150
+ dp[0] = i;
151
+ for (let j = 1; j <= n; j++) {
152
+ const cur = dp[j];
153
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
154
+ dp[j] = Math.min(dp[j] + 1, dp[j - 1] + 1, prev + cost);
155
+ prev = cur;
156
+ }
157
+ }
158
+ return dp[n];
159
+ }
160
+ //# sourceMappingURL=kern-stdlib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kern-stdlib.js","sourceRoot":"","sources":["../../src/codegen/kern-stdlib.ts"],"names":[],"mappings":"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"}