@kernlang/core 3.1.6 → 3.1.8
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.
- package/dist/codegen/data-layer.js +28 -29
- package/dist/codegen/data-layer.js.map +1 -1
- package/dist/codegen/emitters.js +1 -4
- package/dist/codegen/emitters.js.map +1 -1
- package/dist/codegen/events.js +31 -20
- package/dist/codegen/events.js.map +1 -1
- package/dist/codegen/functions.js +7 -5
- package/dist/codegen/functions.js.map +1 -1
- package/dist/codegen/ground-layer.js +9 -5
- package/dist/codegen/ground-layer.js.map +1 -1
- package/dist/codegen/helpers.d.ts +4 -0
- package/dist/codegen/helpers.js +43 -7
- package/dist/codegen/helpers.js.map +1 -1
- package/dist/codegen/machines.js +13 -11
- package/dist/codegen/machines.js.map +1 -1
- package/dist/codegen/modules.js +5 -2
- package/dist/codegen/modules.js.map +1 -1
- package/dist/codegen/screens.d.ts +29 -0
- package/dist/codegen/screens.js +202 -0
- package/dist/codegen/screens.js.map +1 -0
- package/dist/codegen/semantic-types.js.map +1 -1
- package/dist/codegen/test-gen.js +1 -1
- package/dist/codegen/test-gen.js.map +1 -1
- package/dist/codegen/type-system.js +36 -18
- package/dist/codegen/type-system.js.map +1 -1
- package/dist/codegen-core.d.ts +11 -10
- package/dist/codegen-core.js +225 -108
- package/dist/codegen-core.js.map +1 -1
- package/dist/concepts.js.map +1 -1
- package/dist/config.js +15 -2
- package/dist/config.js.map +1 -1
- package/dist/coverage-gap.js +5 -5
- package/dist/coverage-gap.js.map +1 -1
- package/dist/decompiler.d.ts +1 -1
- package/dist/decompiler.js +6 -4
- package/dist/decompiler.js.map +1 -1
- package/dist/errors.d.ts +3 -1
- package/dist/errors.js +4 -2
- package/dist/errors.js.map +1 -1
- package/dist/importer.d.ts +38 -0
- package/dist/importer.js +1135 -0
- package/dist/importer.js.map +1 -0
- package/dist/index.d.ts +37 -34
- package/dist/index.js +38 -38
- package/dist/index.js.map +1 -1
- package/dist/node-props.d.ts +7 -0
- package/dist/node-props.js.map +1 -1
- package/dist/parser-core.d.ts +1 -1
- package/dist/parser-core.js +65 -9
- package/dist/parser-core.js.map +1 -1
- package/dist/parser-diagnostics.d.ts +1 -1
- package/dist/parser-diagnostics.js +3 -2
- package/dist/parser-diagnostics.js.map +1 -1
- package/dist/parser-keywords.d.ts +1 -1
- package/dist/parser-keywords.js +119 -27
- package/dist/parser-keywords.js.map +1 -1
- package/dist/parser-token-stream.js +18 -6
- package/dist/parser-token-stream.js.map +1 -1
- package/dist/parser-tokenizer.js.map +1 -1
- package/dist/parser.d.ts +3 -3
- package/dist/parser.js +15 -4
- package/dist/parser.js.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scanner.js +85 -25
- package/dist/scanner.js.map +1 -1
- package/dist/schema.d.ts +25 -0
- package/dist/schema.js +442 -4
- package/dist/schema.js.map +1 -1
- package/dist/semantic-validator.d.ts +20 -0
- package/dist/semantic-validator.js +82 -0
- package/dist/semantic-validator.js.map +1 -0
- package/dist/source-map.js +2 -2
- package/dist/source-map.js.map +1 -1
- package/dist/spec.d.ts +1 -1
- package/dist/spec.js +197 -56
- package/dist/spec.js.map +1 -1
- package/dist/styles-react.js +1 -1
- package/dist/styles-react.js.map +1 -1
- package/dist/styles-tailwind.js +52 -15
- package/dist/styles-tailwind.js.map +1 -1
- package/dist/template-catalog.js +1 -1
- package/dist/template-catalog.js.map +1 -1
- package/dist/template-engine.d.ts +1 -1
- package/dist/template-engine.js +10 -7
- package/dist/template-engine.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +9 -5
- package/dist/utils.js.map +1 -1
- package/dist/version-adapters.js +1 -2
- package/dist/version-adapters.js.map +1 -1
- package/dist/version-detect.js +3 -3
- package/dist/version-detect.js.map +1 -1
- package/dist/walk.js +6 -2
- package/dist/walk.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { propsOf } from '../node-props.js';
|
|
7
7
|
import { emitIdentifier, emitTemplateSafe, emitTypeAnnotation } from './emitters.js';
|
|
8
|
-
import {
|
|
8
|
+
import { emitDocComment, exportPrefix, getChildren, getFirstChild, getProps, handlerCode, parseParamList, } from './helpers.js';
|
|
9
9
|
const p = getProps;
|
|
10
10
|
const kids = getChildren;
|
|
11
11
|
const firstChild = getFirstChild;
|
|
@@ -17,14 +17,18 @@ export function generateType(node) {
|
|
|
17
17
|
const name = emitIdentifier(props.name, 'UnknownType', node);
|
|
18
18
|
const { values, alias } = props;
|
|
19
19
|
const exp = exportPrefix(node);
|
|
20
|
+
const docs = emitDocComment(node);
|
|
20
21
|
if (values) {
|
|
21
|
-
const members = values
|
|
22
|
-
|
|
22
|
+
const members = values
|
|
23
|
+
.split('|')
|
|
24
|
+
.map((v) => `'${emitTemplateSafe(v.trim())}'`)
|
|
25
|
+
.join(' | ');
|
|
26
|
+
return [...docs, `${exp}type ${name} = ${members};`];
|
|
23
27
|
}
|
|
24
28
|
if (alias) {
|
|
25
|
-
return [`${exp}type ${name} = ${emitTypeAnnotation(alias, 'unknown', node)};`];
|
|
29
|
+
return [...docs, `${exp}type ${name} = ${emitTypeAnnotation(alias, 'unknown', node)};`];
|
|
26
30
|
}
|
|
27
|
-
return [`${exp}type ${name} = unknown;`];
|
|
31
|
+
return [...docs, `${exp}type ${name} = unknown;`];
|
|
28
32
|
}
|
|
29
33
|
// ── Interface ────────────────────────────────────────────────────────────
|
|
30
34
|
export function generateInterface(node) {
|
|
@@ -32,7 +36,7 @@ export function generateInterface(node) {
|
|
|
32
36
|
const name = emitIdentifier(props.name, 'UnknownInterface', node);
|
|
33
37
|
const ext = props.extends ? ` extends ${emitTypeAnnotation(props.extends, 'unknown', node)}` : '';
|
|
34
38
|
const exp = exportPrefix(node);
|
|
35
|
-
const lines = [];
|
|
39
|
+
const lines = [...emitDocComment(node)];
|
|
36
40
|
lines.push(`${exp}interface ${name}${ext} {`);
|
|
37
41
|
for (const field of kids(node, 'field')) {
|
|
38
42
|
const fp = propsOf(field);
|
|
@@ -50,21 +54,28 @@ export function generateUnion(node) {
|
|
|
50
54
|
const discriminant = emitIdentifier(props.discriminant, 'type', node);
|
|
51
55
|
const exp = exportPrefix(node);
|
|
52
56
|
const variants = kids(node, 'variant');
|
|
57
|
+
const docs = emitDocComment(node);
|
|
53
58
|
if (variants.length === 0) {
|
|
54
|
-
return [`${exp}type ${name} = never;`];
|
|
59
|
+
return [...docs, `${exp}type ${name} = never;`];
|
|
55
60
|
}
|
|
56
|
-
const lines = [`${exp}type ${name} =`];
|
|
61
|
+
const lines = [...docs, `${exp}type ${name} =`];
|
|
57
62
|
for (let i = 0; i < variants.length; i++) {
|
|
58
63
|
const vp = propsOf(variants[i]);
|
|
59
|
-
const vname = emitIdentifier(vp.name, 'variant', variants[i]);
|
|
60
64
|
const fields = kids(variants[i], 'field');
|
|
65
|
+
const semi = i === variants.length - 1 ? ';' : '';
|
|
66
|
+
// Type-reference variant: `variant type=TextPart` — emit as union member directly
|
|
67
|
+
if (vp.type && fields.length === 0) {
|
|
68
|
+
lines.push(` | ${emitTypeAnnotation(vp.type, 'unknown', variants[i])}${semi}`);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Inline variant: `variant name=circle` with child fields — emit as discriminated object
|
|
72
|
+
const vname = emitTemplateSafe(vp.name ?? vp.type ?? 'variant');
|
|
61
73
|
const fieldParts = [`${discriminant}: '${emitTemplateSafe(vname)}'`];
|
|
62
74
|
for (const field of fields) {
|
|
63
75
|
const fp = propsOf(field);
|
|
64
76
|
const opt = fp.optional === 'true' || fp.optional === true ? '?' : '';
|
|
65
77
|
fieldParts.push(`${emitIdentifier(fp.name, 'field', field)}${opt}: ${emitTypeAnnotation(fp.type, 'unknown', field)}`);
|
|
66
78
|
}
|
|
67
|
-
const semi = i === variants.length - 1 ? ';' : '';
|
|
68
79
|
lines.push(` | { ${fieldParts.join('; ')} }${semi}`);
|
|
69
80
|
}
|
|
70
81
|
return lines;
|
|
@@ -75,7 +86,7 @@ export function generateService(node) {
|
|
|
75
86
|
const name = emitIdentifier(props.name, 'UnknownService', node);
|
|
76
87
|
const impl = props.implements;
|
|
77
88
|
const exp = exportPrefix(node);
|
|
78
|
-
const lines = [];
|
|
89
|
+
const lines = [...emitDocComment(node)];
|
|
79
90
|
const implClause = impl ? ` implements ${emitTypeAnnotation(impl, 'unknown', node)}` : '';
|
|
80
91
|
lines.push(`${exp}class ${name}${implClause} {`);
|
|
81
92
|
// Fields
|
|
@@ -83,7 +94,9 @@ export function generateService(node) {
|
|
|
83
94
|
const fp = propsOf(field);
|
|
84
95
|
const fieldName = emitIdentifier(fp.name, 'field', field);
|
|
85
96
|
const vis = fp.private === 'true' || fp.private === true ? 'private ' : '';
|
|
86
|
-
const readonly = fp.readonly === 'true' || fp.readonly === true
|
|
97
|
+
const readonly = fp.readonly === 'true' || fp.readonly === true
|
|
98
|
+
? 'readonly '
|
|
99
|
+
: '';
|
|
87
100
|
const typeAnnotation = fp.type ? `: ${emitTypeAnnotation(fp.type, 'unknown', field)}` : '';
|
|
88
101
|
const defaultVal = fp.default;
|
|
89
102
|
// default values are by-design raw code (escape hatch) — documented, not sanitized
|
|
@@ -113,15 +126,19 @@ export function generateService(node) {
|
|
|
113
126
|
const isAsync = mp.async === 'true' || mp.async === true;
|
|
114
127
|
const isStream = mp.stream === 'true' || mp.stream === true;
|
|
115
128
|
const isStatic = mp.static === 'true' || mp.static === true;
|
|
116
|
-
const vis = mp.private === 'true' || mp.private === true
|
|
129
|
+
const vis = mp.private === 'true' || mp.private === true
|
|
130
|
+
? 'private '
|
|
131
|
+
: '';
|
|
117
132
|
const staticKw = isStatic ? 'static ' : '';
|
|
118
133
|
const star = isStream ? '*' : '';
|
|
119
|
-
const asyncKw =
|
|
134
|
+
const asyncKw = isAsync || isStream ? 'async ' : '';
|
|
120
135
|
const mcode = handlerCode(method);
|
|
121
136
|
// stream=true → AsyncGenerator return type
|
|
122
137
|
const mreturns = isStream
|
|
123
138
|
? `: AsyncGenerator<${emitTypeAnnotation(mp.returns, 'unknown', method)}>`
|
|
124
|
-
: mp.returns
|
|
139
|
+
: mp.returns
|
|
140
|
+
? `: ${emitTypeAnnotation(mp.returns, 'unknown', method)}`
|
|
141
|
+
: '';
|
|
125
142
|
lines.push('');
|
|
126
143
|
lines.push(` ${vis}${staticKw}${asyncKw}${star}${mname}(${mparams})${mreturns} {`);
|
|
127
144
|
if (mcode) {
|
|
@@ -150,13 +167,14 @@ export function generateConst(node) {
|
|
|
150
167
|
const value = props.value;
|
|
151
168
|
const exp = exportPrefix(node);
|
|
152
169
|
const code = handlerCode(node);
|
|
170
|
+
const docs = emitDocComment(node);
|
|
153
171
|
const typeAnnotation = constType ? `: ${emitTypeAnnotation(constType, 'unknown', node)}` : '';
|
|
154
172
|
if (code) {
|
|
155
|
-
return [`${exp}const ${name}${typeAnnotation} = ${code.trim()};`];
|
|
173
|
+
return [...docs, `${exp}const ${name}${typeAnnotation} = ${code.trim()};`];
|
|
156
174
|
}
|
|
157
175
|
if (value) {
|
|
158
|
-
return [`${exp}const ${name}${typeAnnotation} = ${value};`];
|
|
176
|
+
return [...docs, `${exp}const ${name}${typeAnnotation} = ${value};`];
|
|
159
177
|
}
|
|
160
|
-
return [`${exp}const ${name}${typeAnnotation};`];
|
|
178
|
+
return [...docs, `${exp}const ${name}${typeAnnotation};`];
|
|
161
179
|
}
|
|
162
180
|
//# sourceMappingURL=type-system.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-system.js","sourceRoot":"","sources":["../../src/codegen/type-system.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"type-system.js","sourceRoot":"","sources":["../../src/codegen/type-system.ts"],"names":[],"mappings":"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"}
|
package/dist/codegen-core.d.ts
CHANGED
|
@@ -10,20 +10,21 @@
|
|
|
10
10
|
* This file is the thin dispatcher: imports, re-exports, and generateCoreNode switch.
|
|
11
11
|
* Generators that call generateCoreNode recursively remain here to avoid circular imports.
|
|
12
12
|
*/
|
|
13
|
-
import type { IRNode } from './types.js';
|
|
14
13
|
import { type KernRuntime } from './runtime.js';
|
|
15
|
-
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export { generateFunction, generateError } from './codegen/functions.js';
|
|
19
|
-
export { generateMachine, generateMachineReducer } from './codegen/machines.js';
|
|
20
|
-
export { generateConfig, generateStore, generateRepository, generateCache, generateDependency, generateModel } from './codegen/data-layer.js';
|
|
21
|
-
export { generateDerive, generateTransform, generateAction, generateGuard, generateAssume, generateInvariant, generateCollect, generateResolve, generateExpect, generateRecover, generatePattern, generateApply } from './codegen/ground-layer.js';
|
|
14
|
+
import type { IRNode } from './types.js';
|
|
15
|
+
export { generateCache, generateConfig, generateDependency, generateModel, generateRepository, generateStore, } from './codegen/data-layer.js';
|
|
16
|
+
export { emitIdentifier, emitImportSpecifier, emitPath, emitStringLiteral, emitTemplateSafe, emitTypeAnnotation, } from './codegen/emitters.js';
|
|
22
17
|
export { generateEvent, generateOn, generateWebSocket } from './codegen/events.js';
|
|
18
|
+
export { generateError, generateFunction } from './codegen/functions.js';
|
|
19
|
+
export { generateAction, generateApply, generateAssume, generateCollect, generateDerive, generateExpect, generateGuard, generateInvariant, generatePattern, generateRecover, generateResolve, generateTransform, } from './codegen/ground-layer.js';
|
|
20
|
+
export { capitalize, cssPropertyName, dedent, emitLowConfidenceTodo, emitReasonAnnotations, exportPrefix, getChildren, getFirstChild, getProps, getPseudoStyles, getStyles, getThemeRefs, handlerCode, parseParamList, sourceComment, } from './codegen/helpers.js';
|
|
21
|
+
export { generateMachine, generateMachineReducer } from './codegen/machines.js';
|
|
23
22
|
export { generateImport } from './codegen/modules.js';
|
|
24
|
-
export {
|
|
25
|
-
export { mapSemanticType, SEMANTIC_TYPE_MAP } from './codegen/semantic-types.js';
|
|
23
|
+
export { generateScreen } from './codegen/screens.js';
|
|
26
24
|
export type { SemanticTypeMapping } from './codegen/semantic-types.js';
|
|
25
|
+
export { mapSemanticType, SEMANTIC_TYPE_MAP } from './codegen/semantic-types.js';
|
|
26
|
+
export { generateTest } from './codegen/test-gen.js';
|
|
27
|
+
export { generateConst, generateInterface, generateService, generateType, generateUnion, } from './codegen/type-system.js';
|
|
27
28
|
/** Register an evolved generator (called at startup). */
|
|
28
29
|
export declare function registerEvolvedGenerator(keyword: string, fn: (node: IRNode) => string[]): void;
|
|
29
30
|
/** Register a target-specific evolved generator (called at startup). */
|
package/dist/codegen-core.js
CHANGED
|
@@ -10,38 +10,40 @@
|
|
|
10
10
|
* This file is the thin dispatcher: imports, re-exports, and generateCoreNode switch.
|
|
11
11
|
* Generators that call generateCoreNode recursively remain here to avoid circular imports.
|
|
12
12
|
*/
|
|
13
|
-
import { propsOf } from './node-props.js';
|
|
14
|
-
import { isTemplateNode, expandTemplateNode } from './template-engine.js';
|
|
15
13
|
import { KernCodegenError } from './errors.js';
|
|
14
|
+
import { propsOf } from './node-props.js';
|
|
16
15
|
import { defaultRuntime } from './runtime.js';
|
|
16
|
+
import { expandTemplateNode, isTemplateNode } from './template-engine.js';
|
|
17
|
+
export { generateCache, generateConfig, generateDependency, generateModel, generateRepository, generateStore, } from './codegen/data-layer.js';
|
|
17
18
|
// ── Re-exports: emitters & helpers (backward compatibility) ─────────────
|
|
18
|
-
export { emitIdentifier,
|
|
19
|
-
export { getProps, getChildren, getFirstChild, getStyles, getPseudoStyles, getThemeRefs, dedent, cssPropertyName, handlerCode, exportPrefix, capitalize, parseParamList, emitReasonAnnotations, emitLowConfidenceTodo } from './codegen/helpers.js';
|
|
20
|
-
// ── Re-exports: domain generators (backward compatibility) ──────────────
|
|
21
|
-
export { generateType, generateInterface, generateUnion, generateService, generateConst } from './codegen/type-system.js';
|
|
22
|
-
export { generateFunction, generateError } from './codegen/functions.js';
|
|
23
|
-
export { generateMachine, generateMachineReducer } from './codegen/machines.js';
|
|
24
|
-
export { generateConfig, generateStore, generateRepository, generateCache, generateDependency, generateModel } from './codegen/data-layer.js';
|
|
25
|
-
export { generateDerive, generateTransform, generateAction, generateGuard, generateAssume, generateInvariant, generateCollect, generateResolve, generateExpect, generateRecover, generatePattern, generateApply } from './codegen/ground-layer.js';
|
|
19
|
+
export { emitIdentifier, emitImportSpecifier, emitPath, emitStringLiteral, emitTemplateSafe, emitTypeAnnotation, } from './codegen/emitters.js';
|
|
26
20
|
export { generateEvent, generateOn, generateWebSocket } from './codegen/events.js';
|
|
21
|
+
export { generateError, generateFunction } from './codegen/functions.js';
|
|
22
|
+
export { generateAction, generateApply, generateAssume, generateCollect, generateDerive, generateExpect, generateGuard, generateInvariant, generatePattern, generateRecover, generateResolve, generateTransform, } from './codegen/ground-layer.js';
|
|
23
|
+
export { capitalize, cssPropertyName, dedent, emitLowConfidenceTodo, emitReasonAnnotations, exportPrefix, getChildren, getFirstChild, getProps, getPseudoStyles, getStyles, getThemeRefs, handlerCode, parseParamList, sourceComment, } from './codegen/helpers.js';
|
|
24
|
+
export { generateMachine, generateMachineReducer } from './codegen/machines.js';
|
|
27
25
|
export { generateImport } from './codegen/modules.js';
|
|
28
|
-
export {
|
|
26
|
+
export { generateScreen } from './codegen/screens.js';
|
|
29
27
|
export { mapSemanticType, SEMANTIC_TYPE_MAP } from './codegen/semantic-types.js';
|
|
28
|
+
export { generateTest } from './codegen/test-gen.js';
|
|
29
|
+
// ── Re-exports: domain generators (backward compatibility) ──────────────
|
|
30
|
+
export { generateConst, generateInterface, generateService, generateType, generateUnion, } from './codegen/type-system.js';
|
|
31
|
+
import { generateCache, generateConfig, generateDependency, generateModel, generateRepository, generateStore, } from './codegen/data-layer.js';
|
|
30
32
|
// ── Imports for local use within this file ──────────────────────────────
|
|
31
|
-
import { emitIdentifier,
|
|
32
|
-
import { getProps, getChildren, getFirstChild, emitReasonAnnotations, emitLowConfidenceTodo } from './codegen/helpers.js';
|
|
33
|
-
import { generateType, generateInterface, generateUnion, generateService, generateConst } from './codegen/type-system.js';
|
|
34
|
-
import { generateFunction, generateError } from './codegen/functions.js';
|
|
35
|
-
import { generateMachine } from './codegen/machines.js';
|
|
36
|
-
import { generateConfig, generateStore, generateRepository, generateCache, generateDependency, generateModel } from './codegen/data-layer.js';
|
|
37
|
-
import { generateDerive, generateTransform, generateAction, generateGuard, generateAssume, generateInvariant, generateCollect, generateResolve, generateExpect, generateRecover, generatePattern, generateApply } from './codegen/ground-layer.js';
|
|
33
|
+
import { emitIdentifier, emitImportSpecifier, emitTemplateSafe } from './codegen/emitters.js';
|
|
38
34
|
import { generateEvent, generateOn, generateWebSocket } from './codegen/events.js';
|
|
35
|
+
import { generateError, generateFunction } from './codegen/functions.js';
|
|
36
|
+
import { generateAction, generateApply, generateAssume, generateCollect, generateDerive, generateExpect, generateGuard, generateInvariant, generatePattern, generateRecover, generateResolve, generateTransform, } from './codegen/ground-layer.js';
|
|
37
|
+
import { emitLowConfidenceTodo, emitReasonAnnotations, getChildren, getFirstChild, getProps, } from './codegen/helpers.js';
|
|
38
|
+
import { generateMachine } from './codegen/machines.js';
|
|
39
39
|
import { generateImport } from './codegen/modules.js';
|
|
40
|
+
import { generateScreen } from './codegen/screens.js';
|
|
40
41
|
import { generateTest } from './codegen/test-gen.js';
|
|
42
|
+
import { generateConst, generateInterface, generateService, generateType, generateUnion, } from './codegen/type-system.js';
|
|
41
43
|
// ── Internal aliases ────────────────────────────────────────────────────
|
|
42
44
|
const p = getProps;
|
|
43
45
|
const kids = getChildren;
|
|
44
|
-
const
|
|
46
|
+
const _firstChild = getFirstChild;
|
|
45
47
|
// ── Evolved Generators (v4) ─────────────────────────────────────────────
|
|
46
48
|
// Populated at startup by evolved-node-loader. Checked in generateCoreNode
|
|
47
49
|
// before the default case, allowing graduated nodes to produce output.
|
|
@@ -82,9 +84,19 @@ export function generateModule(node) {
|
|
|
82
84
|
const rawFrom = ep.from;
|
|
83
85
|
const safeFrom = rawFrom ? emitImportSpecifier(rawFrom, exp) : '';
|
|
84
86
|
const rawNames = ep.names;
|
|
85
|
-
const safeNames = rawNames
|
|
87
|
+
const safeNames = rawNames
|
|
88
|
+
? rawNames
|
|
89
|
+
.split(',')
|
|
90
|
+
.map((s) => emitIdentifier(s.trim(), 'export', exp))
|
|
91
|
+
.join(', ')
|
|
92
|
+
: '';
|
|
86
93
|
const rawTypeNames = ep.types;
|
|
87
|
-
const safeTypeNames = rawTypeNames
|
|
94
|
+
const safeTypeNames = rawTypeNames
|
|
95
|
+
? rawTypeNames
|
|
96
|
+
.split(',')
|
|
97
|
+
.map((s) => emitIdentifier(s.trim(), 'export', exp))
|
|
98
|
+
.join(', ')
|
|
99
|
+
: '';
|
|
88
100
|
const star = ep.star === 'true' || ep.star === true;
|
|
89
101
|
const safeDefault = ep.default ? emitIdentifier(ep.default, 'default', exp) : '';
|
|
90
102
|
// export * from './foo.js'
|
|
@@ -207,13 +219,7 @@ export function generateConditional(node) {
|
|
|
207
219
|
if (childLines.length === 1) {
|
|
208
220
|
return [`{${condition} && (${childLines[0].trim()})}`];
|
|
209
221
|
}
|
|
210
|
-
return [
|
|
211
|
-
`{${condition} && (`,
|
|
212
|
-
` <>`,
|
|
213
|
-
...childLines.map(l => ` ${l}`),
|
|
214
|
-
` </>`,
|
|
215
|
-
`)}`,
|
|
216
|
-
];
|
|
222
|
+
return [`{${condition} && (`, ` <>`, ...childLines.map((l) => ` ${l}`), ` </>`, `)}`];
|
|
217
223
|
}
|
|
218
224
|
// ── Select ───────────────────────────────────────────────────────────────
|
|
219
225
|
// select name=status value=current placeholder="Choose"
|
|
@@ -247,37 +253,80 @@ export function generateSelect(node) {
|
|
|
247
253
|
}
|
|
248
254
|
// ── Dispatcher ───────────────────────────────────────────────────────────
|
|
249
255
|
export const CORE_NODE_TYPES = new Set([
|
|
250
|
-
'type',
|
|
251
|
-
'
|
|
252
|
-
'
|
|
253
|
-
'
|
|
254
|
-
'
|
|
255
|
-
'
|
|
256
|
-
'
|
|
257
|
-
'
|
|
256
|
+
'type',
|
|
257
|
+
'interface',
|
|
258
|
+
'field',
|
|
259
|
+
'fn',
|
|
260
|
+
'union',
|
|
261
|
+
'variant',
|
|
262
|
+
'service',
|
|
263
|
+
'method',
|
|
264
|
+
'singleton',
|
|
265
|
+
'constructor',
|
|
266
|
+
'machine',
|
|
267
|
+
'transition',
|
|
268
|
+
'error',
|
|
269
|
+
'module',
|
|
270
|
+
'export',
|
|
271
|
+
'config',
|
|
272
|
+
'store',
|
|
273
|
+
'test',
|
|
274
|
+
'describe',
|
|
275
|
+
'it',
|
|
276
|
+
'event',
|
|
277
|
+
'import',
|
|
278
|
+
'const',
|
|
258
279
|
'hook',
|
|
259
|
-
'on',
|
|
260
|
-
'
|
|
280
|
+
'on',
|
|
281
|
+
'websocket',
|
|
282
|
+
'template',
|
|
283
|
+
'slot',
|
|
284
|
+
'body',
|
|
261
285
|
// Async extensions
|
|
262
|
-
'signal',
|
|
286
|
+
'signal',
|
|
287
|
+
'cleanup',
|
|
263
288
|
// Ground layer
|
|
264
|
-
'derive',
|
|
265
|
-
'
|
|
266
|
-
'
|
|
267
|
-
'
|
|
268
|
-
'
|
|
289
|
+
'derive',
|
|
290
|
+
'transform',
|
|
291
|
+
'action',
|
|
292
|
+
'guard',
|
|
293
|
+
'assume',
|
|
294
|
+
'invariant',
|
|
295
|
+
'each',
|
|
296
|
+
'collect',
|
|
297
|
+
'branch',
|
|
298
|
+
'path',
|
|
299
|
+
'resolve',
|
|
300
|
+
'candidate',
|
|
301
|
+
'discriminator',
|
|
302
|
+
'expect',
|
|
303
|
+
'recover',
|
|
304
|
+
'strategy',
|
|
305
|
+
'pattern',
|
|
306
|
+
'apply',
|
|
269
307
|
// Reason layer
|
|
270
|
-
'reason',
|
|
308
|
+
'reason',
|
|
309
|
+
'evidence',
|
|
271
310
|
// Confidence layer
|
|
272
311
|
'needs',
|
|
273
312
|
// Backend data layer (graduated nodes)
|
|
274
|
-
'model',
|
|
313
|
+
'model',
|
|
314
|
+
'column',
|
|
315
|
+
'relation',
|
|
275
316
|
'repository',
|
|
276
|
-
'dependency',
|
|
277
|
-
'
|
|
317
|
+
'dependency',
|
|
318
|
+
'inject',
|
|
319
|
+
'cache',
|
|
320
|
+
'entry',
|
|
321
|
+
'invalidate',
|
|
278
322
|
// UI controls (graduated nodes)
|
|
279
323
|
'conditional',
|
|
280
|
-
'select',
|
|
324
|
+
'select',
|
|
325
|
+
'option',
|
|
326
|
+
// Screen (React/Ink component)
|
|
327
|
+
'screen',
|
|
328
|
+
// Meta
|
|
329
|
+
'doc',
|
|
281
330
|
]);
|
|
282
331
|
/** Check if a node type is a core language construct. */
|
|
283
332
|
export function isCoreNode(type) {
|
|
@@ -298,70 +347,138 @@ export function isCoreNode(type) {
|
|
|
298
347
|
export function generateCoreNode(node, target, runtime) {
|
|
299
348
|
const rt = runtime ?? defaultRuntime;
|
|
300
349
|
switch (node.type) {
|
|
301
|
-
case 'type':
|
|
302
|
-
|
|
303
|
-
case '
|
|
304
|
-
|
|
305
|
-
case '
|
|
306
|
-
|
|
307
|
-
case '
|
|
308
|
-
|
|
309
|
-
case '
|
|
310
|
-
|
|
311
|
-
case '
|
|
312
|
-
|
|
313
|
-
case '
|
|
314
|
-
|
|
315
|
-
case '
|
|
316
|
-
|
|
317
|
-
case '
|
|
350
|
+
case 'type':
|
|
351
|
+
return generateType(node);
|
|
352
|
+
case 'interface':
|
|
353
|
+
return generateInterface(node);
|
|
354
|
+
case 'union':
|
|
355
|
+
return generateUnion(node);
|
|
356
|
+
case 'service':
|
|
357
|
+
return generateService(node);
|
|
358
|
+
case 'fn':
|
|
359
|
+
return generateFunction(node);
|
|
360
|
+
case 'machine':
|
|
361
|
+
return generateMachine(node);
|
|
362
|
+
case 'screen':
|
|
363
|
+
return generateScreen(node);
|
|
364
|
+
case 'error':
|
|
365
|
+
return generateError(node);
|
|
366
|
+
case 'module':
|
|
367
|
+
return generateModule(node);
|
|
368
|
+
case 'config':
|
|
369
|
+
return generateConfig(node);
|
|
370
|
+
case 'store':
|
|
371
|
+
return generateStore(node);
|
|
372
|
+
case 'test':
|
|
373
|
+
return generateTest(node);
|
|
374
|
+
case 'event':
|
|
375
|
+
return generateEvent(node);
|
|
376
|
+
case 'import':
|
|
377
|
+
return generateImport(node);
|
|
378
|
+
case 'const':
|
|
379
|
+
return generateConst(node);
|
|
380
|
+
case 'hook':
|
|
381
|
+
return []; // Handled by @kernlang/react
|
|
382
|
+
case 'on':
|
|
383
|
+
return generateOn(node);
|
|
384
|
+
case 'websocket':
|
|
385
|
+
return generateWebSocket(node);
|
|
318
386
|
// Ground layer
|
|
319
|
-
case 'derive':
|
|
320
|
-
|
|
321
|
-
case '
|
|
322
|
-
|
|
323
|
-
case '
|
|
324
|
-
|
|
325
|
-
case '
|
|
326
|
-
|
|
327
|
-
case '
|
|
328
|
-
|
|
329
|
-
case '
|
|
330
|
-
|
|
331
|
-
case '
|
|
332
|
-
|
|
387
|
+
case 'derive':
|
|
388
|
+
return generateDerive(node);
|
|
389
|
+
case 'transform':
|
|
390
|
+
return generateTransform(node);
|
|
391
|
+
case 'action':
|
|
392
|
+
return generateAction(node);
|
|
393
|
+
case 'guard':
|
|
394
|
+
return generateGuard(node);
|
|
395
|
+
case 'assume':
|
|
396
|
+
return generateAssume(node);
|
|
397
|
+
case 'invariant':
|
|
398
|
+
return generateInvariant(node);
|
|
399
|
+
case 'each':
|
|
400
|
+
return generateEach(node);
|
|
401
|
+
case 'collect':
|
|
402
|
+
return generateCollect(node);
|
|
403
|
+
case 'branch':
|
|
404
|
+
return generateBranch(node);
|
|
405
|
+
case 'resolve':
|
|
406
|
+
return generateResolve(node);
|
|
407
|
+
case 'expect':
|
|
408
|
+
return generateExpect(node);
|
|
409
|
+
case 'recover':
|
|
410
|
+
return generateRecover(node);
|
|
411
|
+
case 'pattern':
|
|
412
|
+
return generatePattern(node);
|
|
413
|
+
case 'apply':
|
|
414
|
+
return generateApply(node);
|
|
333
415
|
// Template / structural definitions produce no output
|
|
334
|
-
case 'template':
|
|
335
|
-
|
|
336
|
-
case '
|
|
337
|
-
|
|
338
|
-
case '
|
|
339
|
-
|
|
340
|
-
case '
|
|
341
|
-
|
|
342
|
-
case '
|
|
343
|
-
|
|
416
|
+
case 'template':
|
|
417
|
+
return [];
|
|
418
|
+
case 'slot':
|
|
419
|
+
return [];
|
|
420
|
+
case 'body':
|
|
421
|
+
return [];
|
|
422
|
+
case 'path':
|
|
423
|
+
return [];
|
|
424
|
+
case 'candidate':
|
|
425
|
+
return [];
|
|
426
|
+
case 'discriminator':
|
|
427
|
+
return [];
|
|
428
|
+
case 'strategy':
|
|
429
|
+
return [];
|
|
430
|
+
case 'reason':
|
|
431
|
+
return [];
|
|
432
|
+
case 'evidence':
|
|
433
|
+
return [];
|
|
434
|
+
case 'needs':
|
|
435
|
+
return [];
|
|
344
436
|
// Graduated nodes — backend data layer
|
|
345
|
-
case 'model':
|
|
346
|
-
|
|
347
|
-
case '
|
|
348
|
-
|
|
437
|
+
case 'model':
|
|
438
|
+
return generateModel(node);
|
|
439
|
+
case 'repository':
|
|
440
|
+
return generateRepository(node);
|
|
441
|
+
case 'dependency':
|
|
442
|
+
return generateDependency(node);
|
|
443
|
+
case 'cache':
|
|
444
|
+
return generateCache(node);
|
|
349
445
|
// Graduated nodes — UI controls
|
|
350
|
-
case 'conditional':
|
|
351
|
-
|
|
446
|
+
case 'conditional':
|
|
447
|
+
return generateConditional(node);
|
|
448
|
+
case 'select':
|
|
449
|
+
return generateSelect(node);
|
|
352
450
|
// Structural children consumed by parents
|
|
353
|
-
case 'variant':
|
|
354
|
-
|
|
355
|
-
case '
|
|
356
|
-
|
|
357
|
-
case '
|
|
358
|
-
|
|
359
|
-
case '
|
|
360
|
-
|
|
361
|
-
case '
|
|
362
|
-
|
|
363
|
-
case '
|
|
364
|
-
|
|
451
|
+
case 'variant':
|
|
452
|
+
return [];
|
|
453
|
+
case 'method':
|
|
454
|
+
return [];
|
|
455
|
+
case 'singleton':
|
|
456
|
+
return [];
|
|
457
|
+
case 'constructor':
|
|
458
|
+
return [];
|
|
459
|
+
case 'signal':
|
|
460
|
+
return [];
|
|
461
|
+
case 'cleanup':
|
|
462
|
+
return [];
|
|
463
|
+
case 'column':
|
|
464
|
+
return [];
|
|
465
|
+
case 'relation':
|
|
466
|
+
return [];
|
|
467
|
+
case 'inject':
|
|
468
|
+
return [];
|
|
469
|
+
case 'entry':
|
|
470
|
+
return [];
|
|
471
|
+
case 'invalidate':
|
|
472
|
+
return [];
|
|
473
|
+
case 'option':
|
|
474
|
+
return [];
|
|
475
|
+
case 'doc': {
|
|
476
|
+
const text = node.props?.text || node.props?.code || '';
|
|
477
|
+
if (text.includes('\n')) {
|
|
478
|
+
return ['/**', ...text.split('\n').map((l) => ` * ${l}`), ' */'];
|
|
479
|
+
}
|
|
480
|
+
return [`/** ${text} */`];
|
|
481
|
+
}
|
|
365
482
|
default: {
|
|
366
483
|
// Check evolved generators (v4) — target-specific first, then default
|
|
367
484
|
const targetMap = target ? rt.evolvedTargetGenerators.get(node.type) : undefined;
|