@kernlang/core 3.1.5 → 3.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -0
- package/README.md +5 -2
- package/dist/codegen/data-layer.d.ts +12 -0
- package/dist/codegen/data-layer.js +292 -0
- package/dist/codegen/data-layer.js.map +1 -0
- package/dist/codegen/events.d.ts +9 -0
- package/dist/codegen/events.js +158 -0
- package/dist/codegen/events.js.map +1 -0
- package/dist/codegen/functions.d.ts +8 -0
- package/dist/codegen/functions.js +147 -0
- package/dist/codegen/functions.js.map +1 -0
- package/dist/codegen/ground-layer.d.ts +22 -0
- package/dist/codegen/ground-layer.js +317 -0
- package/dist/codegen/ground-layer.js.map +1 -0
- package/dist/codegen/machines.d.ts +9 -0
- package/dist/codegen/machines.js +127 -0
- package/dist/codegen/machines.js.map +1 -0
- package/dist/codegen/modules.d.ts +10 -0
- package/dist/codegen/modules.js +40 -0
- package/dist/codegen/modules.js.map +1 -0
- package/dist/codegen/semantic-types.d.ts +14 -0
- package/dist/codegen/semantic-types.js +31 -0
- package/dist/codegen/semantic-types.js.map +1 -0
- package/dist/codegen/test-gen.d.ts +7 -0
- package/dist/codegen/test-gen.js +56 -0
- package/dist/codegen/test-gen.js.map +1 -0
- package/dist/codegen/type-system.d.ts +11 -0
- package/dist/codegen/type-system.js +162 -0
- package/dist/codegen/type-system.js.map +1 -0
- package/dist/codegen-core.d.ts +26 -33
- package/dist/codegen-core.js +58 -1367
- package/dist/codegen-core.js.map +1 -1
- package/dist/config.d.ts +20 -1
- package/dist/config.js +23 -3
- package/dist/config.js.map +1 -1
- package/dist/coverage-gap.js +6 -2
- package/dist/coverage-gap.js.map +1 -1
- package/dist/decompiler.d.ts +9 -0
- package/dist/decompiler.js +17 -2
- package/dist/decompiler.js.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.js +10 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/node-props.d.ts +253 -0
- package/dist/node-props.js +35 -0
- package/dist/node-props.js.map +1 -0
- package/dist/parser-core.d.ts +5 -0
- package/dist/parser-core.js +363 -0
- package/dist/parser-core.js.map +1 -0
- package/dist/parser-diagnostics.d.ts +14 -0
- package/dist/parser-diagnostics.js +31 -0
- package/dist/parser-diagnostics.js.map +1 -0
- package/dist/parser-keywords.d.ts +5 -0
- package/dist/parser-keywords.js +135 -0
- package/dist/parser-keywords.js.map +1 -0
- package/dist/parser-style.d.ts +3 -0
- package/dist/parser-style.js +73 -0
- package/dist/parser-style.js.map +1 -0
- package/dist/parser-token-stream.d.ts +27 -0
- package/dist/parser-token-stream.js +69 -0
- package/dist/parser-token-stream.js.map +1 -0
- package/dist/parser-tokenizer.d.ts +11 -0
- package/dist/parser-tokenizer.js +188 -0
- package/dist/parser-tokenizer.js.map +1 -0
- package/dist/parser.d.ts +59 -12
- package/dist/parser.js +51 -862
- package/dist/parser.js.map +1 -1
- package/dist/schema.d.ts +7 -2
- package/dist/schema.js +7 -2
- package/dist/schema.js.map +1 -1
- package/dist/source-map.d.ts +27 -0
- package/dist/source-map.js +82 -0
- package/dist/source-map.js.map +1 -0
- package/dist/spec.d.ts +1 -1
- package/dist/spec.js +2 -0
- package/dist/spec.js.map +1 -1
- package/dist/styles-tailwind.d.ts +10 -0
- package/dist/styles-tailwind.js +10 -0
- package/dist/styles-tailwind.js.map +1 -1
- package/dist/template-engine.d.ts +10 -5
- package/dist/template-engine.js +10 -5
- package/dist/template-engine.js.map +1 -1
- package/dist/types.d.ts +8 -3
- package/dist/utils.d.ts +20 -0
- package/dist/utils.js +20 -0
- package/dist/utils.js.map +1 -1
- package/dist/walk.d.ts +40 -0
- package/dist/walk.js +107 -0
- package/dist/walk.js.map +1 -0
- package/package.json +2 -2
package/LICENSE
CHANGED
|
@@ -659,3 +659,20 @@ specific requirements.
|
|
|
659
659
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
660
660
|
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
661
661
|
<https://www.gnu.org/licenses/>.
|
|
662
|
+
|
|
663
|
+
===============================================================================
|
|
664
|
+
|
|
665
|
+
Copyright (c) 2026 KERNlang
|
|
666
|
+
|
|
667
|
+
Additional permission under GNU AGPL version 3 section 7:
|
|
668
|
+
|
|
669
|
+
If you modify this Program, or any covered work, by linking or combining
|
|
670
|
+
it with other code, such other code is not for that reason alone subject
|
|
671
|
+
to any of the requirements of the GNU Affero GPL version 3.
|
|
672
|
+
|
|
673
|
+
---
|
|
674
|
+
|
|
675
|
+
COMMERCIAL USE
|
|
676
|
+
|
|
677
|
+
Using this software as part of a paid product or service requires a
|
|
678
|
+
commercial license. Contact: hello@kernlang.dev
|
package/README.md
CHANGED
|
@@ -18,8 +18,11 @@ npm install @kernlang/core
|
|
|
18
18
|
```ts
|
|
19
19
|
import { parse, resolveConfig } from '@kernlang/core';
|
|
20
20
|
|
|
21
|
-
const config = resolveConfig({ target: '
|
|
22
|
-
const ir = parse(`
|
|
21
|
+
const config = resolveConfig({ target: 'nextjs' });
|
|
22
|
+
const ir = parse(`
|
|
23
|
+
page "Home"
|
|
24
|
+
text "Hello"
|
|
25
|
+
`);
|
|
23
26
|
```
|
|
24
27
|
|
|
25
28
|
## License
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Layer Generators — store, config, repository, cache, dependency, model.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from codegen-core.ts for modular codegen architecture.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRNode } from '../types.js';
|
|
7
|
+
export declare function generateConfig(node: IRNode): string[];
|
|
8
|
+
export declare function generateStore(node: IRNode): string[];
|
|
9
|
+
export declare function generateRepository(node: IRNode): string[];
|
|
10
|
+
export declare function generateCache(node: IRNode): string[];
|
|
11
|
+
export declare function generateDependency(node: IRNode): string[];
|
|
12
|
+
export declare function generateModel(node: IRNode): string[];
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Layer Generators — store, config, repository, cache, dependency, model.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from codegen-core.ts for modular codegen architecture.
|
|
5
|
+
*/
|
|
6
|
+
import { propsOf } from '../node-props.js';
|
|
7
|
+
import { emitIdentifier, emitStringLiteral, emitPath, emitTypeAnnotation } from './emitters.js';
|
|
8
|
+
import { getProps, getChildren, getFirstChild, handlerCode, exportPrefix, parseParamList } from './helpers.js';
|
|
9
|
+
const p = getProps;
|
|
10
|
+
const kids = getChildren;
|
|
11
|
+
const firstChild = getFirstChild;
|
|
12
|
+
// ── Config ───────────────────────────────────────────────────────────────
|
|
13
|
+
export function generateConfig(node) {
|
|
14
|
+
const props = propsOf(node);
|
|
15
|
+
const name = emitIdentifier(props.name, 'Config', node);
|
|
16
|
+
const exp = exportPrefix(node);
|
|
17
|
+
const fields = kids(node, 'field');
|
|
18
|
+
const lines = [];
|
|
19
|
+
// Interface
|
|
20
|
+
lines.push(`${exp}interface ${name} {`);
|
|
21
|
+
for (const field of fields) {
|
|
22
|
+
const fp = propsOf(field);
|
|
23
|
+
const fieldName = emitIdentifier(fp.name, 'field', field);
|
|
24
|
+
const opt = fp.default !== undefined ? '?' : '';
|
|
25
|
+
lines.push(` ${fieldName}${opt}: ${emitTypeAnnotation(fp.type, 'unknown', field)};`);
|
|
26
|
+
}
|
|
27
|
+
lines.push('}');
|
|
28
|
+
lines.push('');
|
|
29
|
+
// Defaults object
|
|
30
|
+
lines.push(`${exp}const DEFAULT_${name.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase()}: Required<${name}> = {`);
|
|
31
|
+
for (const field of fields) {
|
|
32
|
+
const fp = propsOf(field);
|
|
33
|
+
const fieldName = emitIdentifier(fp.name, 'field', field);
|
|
34
|
+
const ftype = emitTypeAnnotation(fp.type, 'unknown', field);
|
|
35
|
+
let def = fp.default;
|
|
36
|
+
if (def === undefined) {
|
|
37
|
+
if (ftype === 'number')
|
|
38
|
+
def = '0';
|
|
39
|
+
else if (ftype === 'boolean')
|
|
40
|
+
def = 'false';
|
|
41
|
+
else if (ftype.endsWith('[]'))
|
|
42
|
+
def = '[]';
|
|
43
|
+
else
|
|
44
|
+
def = "''";
|
|
45
|
+
}
|
|
46
|
+
else if (ftype === 'string' || (!['number', 'boolean'].includes(ftype) && !ftype.endsWith('[]') && !def.startsWith("'") && !def.startsWith('"'))) {
|
|
47
|
+
def = emitStringLiteral(def);
|
|
48
|
+
}
|
|
49
|
+
lines.push(` ${fieldName}: ${def},`);
|
|
50
|
+
}
|
|
51
|
+
lines.push('};');
|
|
52
|
+
return lines;
|
|
53
|
+
}
|
|
54
|
+
// ── Store ────────────────────────────────────────────────────────────────
|
|
55
|
+
export function generateStore(node) {
|
|
56
|
+
const props = propsOf(node);
|
|
57
|
+
const name = emitIdentifier(props.name, 'Store', node);
|
|
58
|
+
const rawPath = props.path || '~/.data';
|
|
59
|
+
const key = emitIdentifier(props.key, 'id', node);
|
|
60
|
+
const model = emitIdentifier(props.model, 'unknown', node);
|
|
61
|
+
const exp = exportPrefix(node);
|
|
62
|
+
const lines = [];
|
|
63
|
+
const dirConst = `${name.toUpperCase()}_DIR`;
|
|
64
|
+
// Validate path before interpolation — blocks injection + traversal via storePath
|
|
65
|
+
const resolvedPath = rawPath.startsWith('~/')
|
|
66
|
+
? `join(homedir(), ${emitPath(rawPath.slice(2), node)})`
|
|
67
|
+
: emitPath(rawPath, node);
|
|
68
|
+
lines.push(`import { readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync } from 'node:fs';`);
|
|
69
|
+
lines.push(`import { join, resolve } from 'node:path';`);
|
|
70
|
+
lines.push(`import { homedir } from 'node:os';`);
|
|
71
|
+
lines.push('');
|
|
72
|
+
lines.push(`const ${dirConst} = ${resolvedPath};`);
|
|
73
|
+
lines.push('');
|
|
74
|
+
lines.push(`function ensure${name}Dir(): void {`);
|
|
75
|
+
lines.push(` mkdirSync(${dirConst}, { recursive: true });`);
|
|
76
|
+
lines.push('}');
|
|
77
|
+
lines.push('');
|
|
78
|
+
lines.push(`function safe${name}Path(id: string): string {`);
|
|
79
|
+
lines.push(` const sanitized = id.replace(/[^a-zA-Z0-9_-]/g, '');`);
|
|
80
|
+
lines.push(` if (!sanitized) throw new Error(\`Invalid ID: \${id}\`);`);
|
|
81
|
+
lines.push(` const full = resolve(${dirConst}, \`\${sanitized}.json\`);`);
|
|
82
|
+
lines.push(` if (!full.startsWith(resolve(${dirConst}))) throw new Error(\`Invalid ID: \${id}\`);`);
|
|
83
|
+
lines.push(` return full;`);
|
|
84
|
+
lines.push('}');
|
|
85
|
+
lines.push('');
|
|
86
|
+
lines.push(`${exp}function save${name}(item: ${model}): void {`);
|
|
87
|
+
lines.push(` ensure${name}Dir();`);
|
|
88
|
+
lines.push(` writeFileSync(safe${name}Path((item as any).${key}), JSON.stringify(item, null, 2) + '\\n');`);
|
|
89
|
+
lines.push('}');
|
|
90
|
+
lines.push('');
|
|
91
|
+
lines.push(`${exp}function load${name}(id: string): ${model} | null {`);
|
|
92
|
+
lines.push(` try { return JSON.parse(readFileSync(safe${name}Path(id), 'utf-8')) as ${model}; }`);
|
|
93
|
+
lines.push(` catch (e) { if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null; throw e; }`);
|
|
94
|
+
lines.push('}');
|
|
95
|
+
lines.push('');
|
|
96
|
+
lines.push(`${exp}function list${name}s(limit = 20): ${model}[] {`);
|
|
97
|
+
lines.push(` ensure${name}Dir();`);
|
|
98
|
+
lines.push(` const files = readdirSync(${dirConst}).filter(f => f.endsWith('.json'));`);
|
|
99
|
+
lines.push(` const items: ${model}[] = [];`);
|
|
100
|
+
lines.push(` for (const f of files) {`);
|
|
101
|
+
lines.push(` try { items.push(JSON.parse(readFileSync(join(${dirConst}, f), 'utf-8')) as ${model}); }`);
|
|
102
|
+
lines.push(` catch { /* skip corrupt files */ }`);
|
|
103
|
+
lines.push(` }`);
|
|
104
|
+
lines.push(` return items.sort((a: any, b: any) => (b.updatedAt || '').localeCompare(a.updatedAt || '')).slice(0, limit);`);
|
|
105
|
+
lines.push('}');
|
|
106
|
+
lines.push('');
|
|
107
|
+
lines.push(`${exp}function delete${name}(id: string): boolean {`);
|
|
108
|
+
lines.push(` try { unlinkSync(safe${name}Path(id)); return true; }`);
|
|
109
|
+
lines.push(` catch { return false; }`);
|
|
110
|
+
lines.push('}');
|
|
111
|
+
return lines;
|
|
112
|
+
}
|
|
113
|
+
// ── Repository ───────────────────────────────────────────────────────────
|
|
114
|
+
export function generateRepository(node) {
|
|
115
|
+
const props = propsOf(node);
|
|
116
|
+
const name = emitIdentifier(props.name, 'UnknownRepo', node);
|
|
117
|
+
const model = props.model;
|
|
118
|
+
const exp = exportPrefix(node);
|
|
119
|
+
const lines = [];
|
|
120
|
+
lines.push(`${exp}class ${name} {`);
|
|
121
|
+
if (model) {
|
|
122
|
+
lines.push(` readonly modelType = '${model}';`);
|
|
123
|
+
lines.push('');
|
|
124
|
+
}
|
|
125
|
+
for (const method of kids(node, 'method')) {
|
|
126
|
+
const mp = propsOf(method);
|
|
127
|
+
const mname = emitIdentifier(mp.name, 'method', method);
|
|
128
|
+
const mparams = mp.params ? parseParamList(mp.params) : '';
|
|
129
|
+
const isAsync = mp.async === 'true' || mp.async === true;
|
|
130
|
+
const asyncKw = isAsync ? 'async ' : '';
|
|
131
|
+
const mreturns = mp.returns ? `: ${emitTypeAnnotation(mp.returns, 'unknown', method)}` : '';
|
|
132
|
+
const mcode = handlerCode(method);
|
|
133
|
+
lines.push(` ${asyncKw}${mname}(${mparams})${mreturns} {`);
|
|
134
|
+
if (mcode) {
|
|
135
|
+
for (const line of mcode.split('\n')) {
|
|
136
|
+
lines.push(` ${line}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
lines.push(' }');
|
|
140
|
+
lines.push('');
|
|
141
|
+
}
|
|
142
|
+
lines.push('}');
|
|
143
|
+
return lines;
|
|
144
|
+
}
|
|
145
|
+
// ── Cache ────────────────────────────────────────────────────────────────
|
|
146
|
+
export function generateCache(node) {
|
|
147
|
+
const props = propsOf(node);
|
|
148
|
+
const name = emitIdentifier(props.name, 'unknownCache', node);
|
|
149
|
+
const backend = props.backend || 'memory';
|
|
150
|
+
const prefix = props.prefix || '';
|
|
151
|
+
const ttl = props.ttl;
|
|
152
|
+
const exp = exportPrefix(node);
|
|
153
|
+
const lines = [];
|
|
154
|
+
// Emit backend preamble so generated code compiles
|
|
155
|
+
if (backend === 'redis') {
|
|
156
|
+
lines.push(`import Redis from 'ioredis';`);
|
|
157
|
+
lines.push(`const redis = new Redis(process.env.REDIS_URL || 'redis://localhost:6379');`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
lines.push(`const cache = new Map<string, unknown>();`);
|
|
161
|
+
}
|
|
162
|
+
lines.push('');
|
|
163
|
+
lines.push(`${exp}const ${name} = {`);
|
|
164
|
+
lines.push(` prefix: '${prefix}',`);
|
|
165
|
+
if (ttl)
|
|
166
|
+
lines.push(` ttl: ${ttl},`);
|
|
167
|
+
lines.push(` backend: '${backend}',`);
|
|
168
|
+
lines.push('');
|
|
169
|
+
// Entry methods
|
|
170
|
+
for (const entry of kids(node, 'entry')) {
|
|
171
|
+
const ep = p(entry);
|
|
172
|
+
const entryName = emitIdentifier(ep.name, 'entry', entry);
|
|
173
|
+
const key = ep.key || entryName;
|
|
174
|
+
const strategyNode = firstChild(entry, 'strategy');
|
|
175
|
+
const strategy = strategyNode ? (p(strategyNode).name || 'cache-aside') : 'cache-aside';
|
|
176
|
+
lines.push(` async get${entryName[0].toUpperCase()}${entryName.slice(1)}(id: string) {`);
|
|
177
|
+
const keyExpr = key.includes(prefix) ? key.replace(/\{id\}/g, '${id}') : `${prefix}${key.replace(/\{id\}/g, '${id}')}`;
|
|
178
|
+
lines.push(` const key = \`${keyExpr}\`;`);
|
|
179
|
+
if (strategy === 'read-through') {
|
|
180
|
+
lines.push(` // read-through: check cache, fetch if miss, populate cache`);
|
|
181
|
+
}
|
|
182
|
+
lines.push(` return ${backend === 'redis' ? `await redis.get(key)` : `cache.get(key)`};`);
|
|
183
|
+
lines.push(` },`);
|
|
184
|
+
lines.push('');
|
|
185
|
+
}
|
|
186
|
+
// Invalidation methods
|
|
187
|
+
for (const inv of kids(node, 'invalidate')) {
|
|
188
|
+
const ip = p(inv);
|
|
189
|
+
const on = ip.on || 'update';
|
|
190
|
+
const tags = ip.tags || '';
|
|
191
|
+
lines.push(` async invalidateOn${on[0].toUpperCase()}${on.slice(1)}(id: string) {`);
|
|
192
|
+
const rawInvKey = tags ? tags.replace(/\{id\}/g, '${id}') : `\${id}`;
|
|
193
|
+
const invalidateKey = rawInvKey.includes(prefix) ? `\`${rawInvKey}\`` : `\`${prefix}${rawInvKey}\``;
|
|
194
|
+
lines.push(` const key = ${invalidateKey};`);
|
|
195
|
+
lines.push(` ${backend === 'redis' ? `await redis.del(key)` : `cache.delete(key)`};`);
|
|
196
|
+
lines.push(` },`);
|
|
197
|
+
lines.push('');
|
|
198
|
+
}
|
|
199
|
+
lines.push('} as const;');
|
|
200
|
+
return lines;
|
|
201
|
+
}
|
|
202
|
+
// ── Dependency ───────────────────────────────────────────────────────────
|
|
203
|
+
export function generateDependency(node) {
|
|
204
|
+
const props = propsOf(node);
|
|
205
|
+
const name = emitIdentifier(props.name, 'unknownDep', node);
|
|
206
|
+
const scope = props.scope || 'transient';
|
|
207
|
+
const exp = exportPrefix(node);
|
|
208
|
+
const lines = [];
|
|
209
|
+
const injects = kids(node, 'inject');
|
|
210
|
+
const returnsNode = firstChild(node, 'returns');
|
|
211
|
+
const returnsType = returnsNode ? (p(returnsNode).name || p(returnsNode).type || 'unknown') : 'unknown';
|
|
212
|
+
if (scope === 'singleton') {
|
|
213
|
+
lines.push(`let _${name}Instance: ${returnsType} | null = null;`);
|
|
214
|
+
lines.push('');
|
|
215
|
+
}
|
|
216
|
+
lines.push(`${exp}function create${name[0].toUpperCase()}${name.slice(1)}(): ${returnsType} {`);
|
|
217
|
+
if (scope === 'singleton') {
|
|
218
|
+
lines.push(` if (_${name}Instance) return _${name}Instance;`);
|
|
219
|
+
}
|
|
220
|
+
for (const inj of injects) {
|
|
221
|
+
const ip = p(inj);
|
|
222
|
+
const injName = emitIdentifier(ip.name, 'dep', inj);
|
|
223
|
+
const injType = ip.type;
|
|
224
|
+
const injFrom = ip.from;
|
|
225
|
+
const injWith = ip.with;
|
|
226
|
+
if (injFrom) {
|
|
227
|
+
lines.push(` const ${injName} = ${injFrom};`);
|
|
228
|
+
}
|
|
229
|
+
else if (injType && injWith) {
|
|
230
|
+
lines.push(` const ${injName} = new ${injType}(${injWith});`);
|
|
231
|
+
}
|
|
232
|
+
else if (injType) {
|
|
233
|
+
lines.push(` const ${injName} = new ${injType}();`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const returnsWith = returnsNode ? p(returnsNode).with : undefined;
|
|
237
|
+
if (returnsWith) {
|
|
238
|
+
lines.push(` const instance = new ${returnsType}(${returnsWith});`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
lines.push(` const instance = new ${returnsType}();`);
|
|
242
|
+
}
|
|
243
|
+
if (scope === 'singleton') {
|
|
244
|
+
lines.push(` _${name}Instance = instance;`);
|
|
245
|
+
}
|
|
246
|
+
lines.push(` return instance;`);
|
|
247
|
+
lines.push('}');
|
|
248
|
+
return lines;
|
|
249
|
+
}
|
|
250
|
+
// ── Model ────────────────────────────────────────────────────────────────
|
|
251
|
+
export function generateModel(node) {
|
|
252
|
+
const props = propsOf(node);
|
|
253
|
+
const name = emitIdentifier(props.name, 'UnknownModel', node);
|
|
254
|
+
const table = props.table;
|
|
255
|
+
const exp = exportPrefix(node);
|
|
256
|
+
const lines = [];
|
|
257
|
+
// Generate TypeScript interface
|
|
258
|
+
lines.push(`${exp}interface ${name} {`);
|
|
259
|
+
for (const col of kids(node, 'column')) {
|
|
260
|
+
const cp = propsOf(col);
|
|
261
|
+
const colName = emitIdentifier(cp.name, 'column', col);
|
|
262
|
+
const colType = mapColumnType(cp.type || 'unknown');
|
|
263
|
+
const opt = cp.optional === 'true' || cp.optional === true ? '?' : '';
|
|
264
|
+
lines.push(` ${colName}${opt}: ${colType};`);
|
|
265
|
+
}
|
|
266
|
+
for (const rel of kids(node, 'relation')) {
|
|
267
|
+
const rp = propsOf(rel);
|
|
268
|
+
const relName = emitIdentifier(rp.name, 'relation', rel);
|
|
269
|
+
const target = rp.target;
|
|
270
|
+
const kind = rp.kind || 'one-to-many';
|
|
271
|
+
const relType = (kind === 'one-to-many' || kind === 'many-to-many') ? `${target}[]` : target;
|
|
272
|
+
lines.push(` ${relName}?: ${relType};`);
|
|
273
|
+
}
|
|
274
|
+
lines.push('}');
|
|
275
|
+
// Prisma-hint comment
|
|
276
|
+
if (table) {
|
|
277
|
+
lines.push('');
|
|
278
|
+
lines.push(`// Prisma: @@map("${table}")`);
|
|
279
|
+
}
|
|
280
|
+
return lines;
|
|
281
|
+
}
|
|
282
|
+
function mapColumnType(kernType) {
|
|
283
|
+
const typeMap = {
|
|
284
|
+
uuid: 'string', string: 'string', text: 'string',
|
|
285
|
+
int: 'number', integer: 'number', float: 'number', decimal: 'number',
|
|
286
|
+
boolean: 'boolean', bool: 'boolean',
|
|
287
|
+
date: 'Date', datetime: 'Date', timestamp: 'Date',
|
|
288
|
+
json: 'Record<string, unknown>',
|
|
289
|
+
};
|
|
290
|
+
return typeMap[kernType] || kernType;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=data-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-layer.js","sourceRoot":"","sources":["../../src/codegen/data-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Generators — event, on, websocket.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from codegen-core.ts for modular codegen architecture.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRNode } from '../types.js';
|
|
7
|
+
export declare function generateEvent(node: IRNode): string[];
|
|
8
|
+
export declare function generateOn(node: IRNode): string[];
|
|
9
|
+
export declare function generateWebSocket(node: IRNode): string[];
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Generators — event, on, websocket.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from codegen-core.ts for modular codegen architecture.
|
|
5
|
+
*/
|
|
6
|
+
import { propsOf } from '../node-props.js';
|
|
7
|
+
import { emitIdentifier, emitTemplateSafe, emitTypeAnnotation } from './emitters.js';
|
|
8
|
+
import { getProps, getChildren, handlerCode, exportPrefix, capitalize } from './helpers.js';
|
|
9
|
+
const p = getProps;
|
|
10
|
+
const kids = getChildren;
|
|
11
|
+
// ── Event ────────────────────────────────────────────────────────────────
|
|
12
|
+
export function generateEvent(node) {
|
|
13
|
+
const props = propsOf(node);
|
|
14
|
+
const name = emitIdentifier(props.name, 'UnknownEvent', node);
|
|
15
|
+
const exp = exportPrefix(node);
|
|
16
|
+
const types = kids(node, 'type');
|
|
17
|
+
const lines = [];
|
|
18
|
+
// Event type union — 'type' children don't have a typed interface in NodePropsMap
|
|
19
|
+
lines.push(`${exp}type ${name}Type = ${types.map(t => `'${emitTemplateSafe((p(t).name || p(t).value))}'`).join(' | ')};`);
|
|
20
|
+
lines.push('');
|
|
21
|
+
// Event interface
|
|
22
|
+
lines.push(`${exp}interface ${name} {`);
|
|
23
|
+
lines.push(` type: ${name}Type;`);
|
|
24
|
+
lines.push(` engineId?: string;`);
|
|
25
|
+
lines.push(` data?: Record<string, unknown>;`);
|
|
26
|
+
lines.push('}');
|
|
27
|
+
lines.push('');
|
|
28
|
+
// Typed event map
|
|
29
|
+
lines.push(`${exp}interface ${name}Map {`);
|
|
30
|
+
for (const t of types) {
|
|
31
|
+
const tp = p(t);
|
|
32
|
+
const tname = emitTemplateSafe((tp.name || tp.value));
|
|
33
|
+
const data = emitTypeAnnotation(tp.data, 'Record<string, unknown>', t);
|
|
34
|
+
lines.push(` '${tname}': ${data};`);
|
|
35
|
+
}
|
|
36
|
+
lines.push('}');
|
|
37
|
+
lines.push('');
|
|
38
|
+
// Callback type
|
|
39
|
+
lines.push(`${exp}type ${name}Callback = (event: ${name}) => void;`);
|
|
40
|
+
return lines;
|
|
41
|
+
}
|
|
42
|
+
// ── On — generic event handler ────────────────────────────────────────────
|
|
43
|
+
export function generateOn(node) {
|
|
44
|
+
const props = propsOf(node);
|
|
45
|
+
const event = props.event || props.name || '';
|
|
46
|
+
const handlerName = props.handler;
|
|
47
|
+
const key = props.key;
|
|
48
|
+
const code = handlerCode(node);
|
|
49
|
+
const exp = exportPrefix(node);
|
|
50
|
+
const lines = [];
|
|
51
|
+
if (handlerName && !code) {
|
|
52
|
+
// Reference to existing handler: on event=click handler=handleClick
|
|
53
|
+
lines.push(`${exp}const on${capitalize(event)} = ${handlerName};`);
|
|
54
|
+
return lines;
|
|
55
|
+
}
|
|
56
|
+
// Determine event parameter type (plain DOM types — target-agnostic)
|
|
57
|
+
const paramType = event === 'key' || event === 'keydown' || event === 'keyup' ? 'e: KeyboardEvent'
|
|
58
|
+
: event === 'message' ? 'event: MessageEvent'
|
|
59
|
+
: event === 'submit' ? 'e: SubmitEvent'
|
|
60
|
+
: event === 'click' ? 'e: MouseEvent'
|
|
61
|
+
: event === 'change' ? 'e: Event'
|
|
62
|
+
: event === 'focus' || event === 'blur' ? 'e: FocusEvent'
|
|
63
|
+
: event === 'drag' || event === 'drop' ? 'e: DragEvent'
|
|
64
|
+
: event === 'scroll' ? 'e: Event'
|
|
65
|
+
: event === 'resize' ? 'e: UIEvent'
|
|
66
|
+
: event === 'connect' || event === 'disconnect' ? 'ws: WebSocket'
|
|
67
|
+
: event === 'error' ? 'error: Error'
|
|
68
|
+
: `e: Event`;
|
|
69
|
+
const fnName = handlerName || `handle${capitalize(event)}`;
|
|
70
|
+
const isAsync = props.async === 'true' || props.async === true;
|
|
71
|
+
const asyncKw = isAsync ? 'async ' : '';
|
|
72
|
+
// Key filter guard
|
|
73
|
+
const keyGuard = key ? ` if (key !== '${key}') return;\n` : '';
|
|
74
|
+
lines.push(`${exp}${asyncKw}function ${fnName}(${paramType}) {`);
|
|
75
|
+
if (keyGuard)
|
|
76
|
+
lines.push(keyGuard.trimEnd());
|
|
77
|
+
if (code) {
|
|
78
|
+
for (const line of code.split('\n')) {
|
|
79
|
+
lines.push(` ${line}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
lines.push('}');
|
|
83
|
+
return lines;
|
|
84
|
+
}
|
|
85
|
+
// ── WebSocket — bidirectional communication ──────────────────────────────
|
|
86
|
+
export function generateWebSocket(node) {
|
|
87
|
+
const props = propsOf(node);
|
|
88
|
+
const path = props.path || '/ws';
|
|
89
|
+
const name = props.name || 'ws';
|
|
90
|
+
const exp = exportPrefix(node);
|
|
91
|
+
const lines = [];
|
|
92
|
+
const onNodes = kids(node, 'on');
|
|
93
|
+
const connectHandler = onNodes.find(n => {
|
|
94
|
+
const e = (p(n).event || p(n).name);
|
|
95
|
+
return e === 'connect' || e === 'connection';
|
|
96
|
+
});
|
|
97
|
+
const messageHandler = onNodes.find(n => {
|
|
98
|
+
const e = (p(n).event || p(n).name);
|
|
99
|
+
return e === 'message';
|
|
100
|
+
});
|
|
101
|
+
const disconnectHandler = onNodes.find(n => {
|
|
102
|
+
const e = (p(n).event || p(n).name);
|
|
103
|
+
return e === 'disconnect' || e === 'close';
|
|
104
|
+
});
|
|
105
|
+
const errorHandler = onNodes.find(n => {
|
|
106
|
+
const e = (p(n).event || p(n).name);
|
|
107
|
+
return e === 'error';
|
|
108
|
+
});
|
|
109
|
+
lines.push(`${exp}function setup${capitalize(name)}(wss: WebSocketServer) {`);
|
|
110
|
+
lines.push(` wss.on('connection', (ws, req) => {`);
|
|
111
|
+
lines.push(` const path = req.url || '${path}';`);
|
|
112
|
+
if (connectHandler) {
|
|
113
|
+
const code = handlerCode(connectHandler);
|
|
114
|
+
if (code) {
|
|
115
|
+
for (const line of code.split('\n')) {
|
|
116
|
+
lines.push(` ${line}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(` ws.on('message', (raw) => {`);
|
|
122
|
+
if (messageHandler) {
|
|
123
|
+
const code = handlerCode(messageHandler);
|
|
124
|
+
lines.push(` const data = JSON.parse(raw.toString());`);
|
|
125
|
+
if (code) {
|
|
126
|
+
for (const line of code.split('\n')) {
|
|
127
|
+
lines.push(` ${line}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
lines.push(` });`);
|
|
132
|
+
if (errorHandler) {
|
|
133
|
+
lines.push('');
|
|
134
|
+
lines.push(` ws.on('error', (error) => {`);
|
|
135
|
+
const code = handlerCode(errorHandler);
|
|
136
|
+
if (code) {
|
|
137
|
+
for (const line of code.split('\n')) {
|
|
138
|
+
lines.push(` ${line}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
lines.push(` });`);
|
|
142
|
+
}
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push(` ws.on('close', () => {`);
|
|
145
|
+
if (disconnectHandler) {
|
|
146
|
+
const code = handlerCode(disconnectHandler);
|
|
147
|
+
if (code) {
|
|
148
|
+
for (const line of code.split('\n')) {
|
|
149
|
+
lines.push(` ${line}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
lines.push(` });`);
|
|
154
|
+
lines.push(` });`);
|
|
155
|
+
lines.push('}');
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/codegen/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Function & Error Generators — fn, error.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from codegen-core.ts for modular codegen architecture.
|
|
5
|
+
*/
|
|
6
|
+
import type { IRNode } from '../types.js';
|
|
7
|
+
export declare function generateFunction(node: IRNode): string[];
|
|
8
|
+
export declare function generateError(node: IRNode): string[];
|