@kernlang/evolve 3.1.4 → 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/dist/evolve-validator-v4.js +71 -110
- package/dist/evolve-validator-v4.js.map +1 -1
- package/package.json +4 -4
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
|
|
@@ -10,6 +10,7 @@ import { ts } from 'ts-morph';
|
|
|
10
10
|
import { compileSandboxedGenerator } from './sandboxed-generator.js';
|
|
11
11
|
import { checkDedup } from './evolve-dedup.js';
|
|
12
12
|
import { compareGoldenOutput } from './golden-test-runner.js';
|
|
13
|
+
import { compileCodegenToJS } from './graduation.js';
|
|
13
14
|
/**
|
|
14
15
|
* Run the full 9-step validation pipeline on a node proposal.
|
|
15
16
|
*/
|
|
@@ -34,34 +35,65 @@ export function validateEvolveProposal(proposal, existingKeywords) {
|
|
|
34
35
|
result.keywordOk = validateKeyword(proposal.keyword, result.errors, existingKeywords);
|
|
35
36
|
if (!result.keywordOk)
|
|
36
37
|
return result;
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
let generator = null;
|
|
41
|
-
try {
|
|
42
|
-
generator = compileSandboxedGenerator(wrapAsCommonJS(proposal.codegenSource));
|
|
43
|
-
result.codegenCompileOk = true;
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
result.errors.push(`Codegen compile failed: ${err.message}`);
|
|
47
|
-
result.codegenCompileOk = false;
|
|
48
|
-
}
|
|
49
|
-
// Step 5: Codegen dry-run
|
|
50
|
-
if (generator && result.parseOk) {
|
|
51
|
-
result.codegenRunOk = validateCodegenRun(proposal, generator, result.errors);
|
|
52
|
-
}
|
|
53
|
-
// Step 6: TypeScript syntax check
|
|
54
|
-
if (result.codegenRunOk && generator) {
|
|
55
|
-
result.typescriptOk = validateTypeScript(proposal, generator, result.errors);
|
|
38
|
+
// Register parser hints once for all parse-dependent steps (3, 5, 6, 7)
|
|
39
|
+
if (proposal.parserHints) {
|
|
40
|
+
registerParserHints(proposal.keyword, proposal.parserHints);
|
|
56
41
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
42
|
+
try {
|
|
43
|
+
// Step 3: Parse check — parse once, reuse AST for steps 5-7
|
|
44
|
+
let ast = null;
|
|
45
|
+
try {
|
|
46
|
+
const parsed = parse(proposal.kernExample);
|
|
47
|
+
if (!parsed || !parsed.type) {
|
|
48
|
+
result.errors.push('kernExample parsed to empty AST');
|
|
49
|
+
result.parseOk = false;
|
|
50
|
+
}
|
|
51
|
+
else if (parsed.type !== proposal.keyword) {
|
|
52
|
+
result.errors.push(`kernExample root type '${parsed.type}' does not match keyword '${proposal.keyword}'`);
|
|
53
|
+
result.parseOk = false;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
result.parseOk = true;
|
|
57
|
+
ast = parsed;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
result.errors.push(`Parse failed: ${err.message}`);
|
|
62
|
+
result.parseOk = false;
|
|
63
|
+
}
|
|
64
|
+
// Step 4: Codegen compile (uses compileCodegenToJS from graduation for
|
|
65
|
+
// consistent TS→JS stripping — same logic used at graduation time)
|
|
66
|
+
let generator = null;
|
|
67
|
+
try {
|
|
68
|
+
generator = compileSandboxedGenerator(compileCodegenToJS(proposal.codegenSource));
|
|
69
|
+
result.codegenCompileOk = true;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
result.errors.push(`Codegen compile failed: ${err.message}`);
|
|
73
|
+
result.codegenCompileOk = false;
|
|
74
|
+
}
|
|
75
|
+
// Step 5: Codegen dry-run
|
|
76
|
+
if (generator && ast) {
|
|
77
|
+
result.codegenRunOk = validateCodegenRun(ast, generator, result.errors);
|
|
78
|
+
}
|
|
79
|
+
// Step 6: TypeScript syntax check
|
|
80
|
+
if (result.codegenRunOk && generator && ast) {
|
|
81
|
+
result.typescriptOk = validateTypeScript(ast, generator, result.errors);
|
|
82
|
+
}
|
|
83
|
+
// Step 7: Golden diff
|
|
84
|
+
if (result.codegenRunOk && generator && ast) {
|
|
85
|
+
result.goldenDiffOk = validateGoldenDiff(ast, proposal, generator, result.errors);
|
|
86
|
+
}
|
|
87
|
+
// Step 8: Dedup check
|
|
88
|
+
result.dedupOk = checkDedup(proposal, existingKeywords || []);
|
|
89
|
+
if (!result.dedupOk) {
|
|
90
|
+
result.errors.push(`Duplicate: keyword '${proposal.keyword}' is too similar to an existing node`);
|
|
91
|
+
}
|
|
60
92
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
93
|
+
finally {
|
|
94
|
+
if (proposal.parserHints) {
|
|
95
|
+
unregisterParserHints(proposal.keyword);
|
|
96
|
+
}
|
|
65
97
|
}
|
|
66
98
|
return result;
|
|
67
99
|
}
|
|
@@ -108,41 +140,17 @@ function validateKeyword(keyword, errors, existing) {
|
|
|
108
140
|
}
|
|
109
141
|
return true;
|
|
110
142
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (!ast || !ast.type) {
|
|
119
|
-
errors.push('kernExample parsed to empty AST');
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
// Root node should match the proposed keyword
|
|
123
|
-
if (ast.type !== proposal.keyword) {
|
|
124
|
-
errors.push(`kernExample root type '${ast.type}' does not match keyword '${proposal.keyword}'`);
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
catch (err) {
|
|
130
|
-
errors.push(`Parse failed: ${err.message}`);
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
if (proposal.parserHints) {
|
|
135
|
-
unregisterParserHints(proposal.keyword);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
143
|
+
/**
|
|
144
|
+
* Run generator on a cloned AST to preserve mutation isolation.
|
|
145
|
+
* Each step gets its own copy so user-provided generators can't
|
|
146
|
+
* corrupt the AST for subsequent steps.
|
|
147
|
+
*/
|
|
148
|
+
function runGenerator(ast, generator) {
|
|
149
|
+
return generator(structuredClone(ast));
|
|
138
150
|
}
|
|
139
|
-
function validateCodegenRun(
|
|
140
|
-
if (proposal.parserHints) {
|
|
141
|
-
registerParserHints(proposal.keyword, proposal.parserHints);
|
|
142
|
-
}
|
|
151
|
+
function validateCodegenRun(ast, generator, errors) {
|
|
143
152
|
try {
|
|
144
|
-
const
|
|
145
|
-
const output = generator(ast);
|
|
153
|
+
const output = runGenerator(ast, generator);
|
|
146
154
|
if (!Array.isArray(output) || output.length === 0) {
|
|
147
155
|
errors.push('Codegen produced empty output');
|
|
148
156
|
return false;
|
|
@@ -153,19 +161,10 @@ function validateCodegenRun(proposal, generator, errors) {
|
|
|
153
161
|
errors.push(`Codegen run failed: ${err.message}`);
|
|
154
162
|
return false;
|
|
155
163
|
}
|
|
156
|
-
finally {
|
|
157
|
-
if (proposal.parserHints) {
|
|
158
|
-
unregisterParserHints(proposal.keyword);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
164
|
}
|
|
162
|
-
function validateTypeScript(
|
|
163
|
-
if (proposal.parserHints) {
|
|
164
|
-
registerParserHints(proposal.keyword, proposal.parserHints);
|
|
165
|
-
}
|
|
165
|
+
function validateTypeScript(ast, generator, errors) {
|
|
166
166
|
try {
|
|
167
|
-
const
|
|
168
|
-
const output = generator(ast).join('\n');
|
|
167
|
+
const output = runGenerator(ast, generator).join('\n');
|
|
169
168
|
// Real TypeScript syntax validation via ts.transpileModule
|
|
170
169
|
// Enable JSX since KERN generates React/JSX output for frontend targets
|
|
171
170
|
const result = ts.transpileModule(output, {
|
|
@@ -196,19 +195,10 @@ function validateTypeScript(proposal, generator, errors) {
|
|
|
196
195
|
errors.push(`TypeScript check failed: ${err.message}`);
|
|
197
196
|
return false;
|
|
198
197
|
}
|
|
199
|
-
finally {
|
|
200
|
-
if (proposal.parserHints) {
|
|
201
|
-
unregisterParserHints(proposal.keyword);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
198
|
}
|
|
205
|
-
function validateGoldenDiff(proposal, generator, errors) {
|
|
206
|
-
if (proposal.parserHints) {
|
|
207
|
-
registerParserHints(proposal.keyword, proposal.parserHints);
|
|
208
|
-
}
|
|
199
|
+
function validateGoldenDiff(ast, proposal, generator, errors) {
|
|
209
200
|
try {
|
|
210
|
-
const
|
|
211
|
-
const actual = generator(ast).join('\n');
|
|
201
|
+
const actual = runGenerator(ast, generator).join('\n');
|
|
212
202
|
const match = compareGoldenOutput(actual, proposal.expectedOutput);
|
|
213
203
|
if (!match) {
|
|
214
204
|
errors.push('Golden diff mismatch: codegen output differs from expectedOutput');
|
|
@@ -220,34 +210,5 @@ function validateGoldenDiff(proposal, generator, errors) {
|
|
|
220
210
|
errors.push(`Golden diff failed: ${err.message}`);
|
|
221
211
|
return false;
|
|
222
212
|
}
|
|
223
|
-
finally {
|
|
224
|
-
if (proposal.parserHints) {
|
|
225
|
-
unregisterParserHints(proposal.keyword);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Wrap raw generator source as CommonJS for the sandbox.
|
|
231
|
-
* Handles both "export default function..." and plain "function generate..." patterns.
|
|
232
|
-
*/
|
|
233
|
-
function wrapAsCommonJS(source) {
|
|
234
|
-
// Already CommonJS
|
|
235
|
-
if (source.includes('module.exports'))
|
|
236
|
-
return source;
|
|
237
|
-
// ES module: export default function(node, helpers) { ... }
|
|
238
|
-
let wrapped = source
|
|
239
|
-
.replace(/^export\s+default\s+/m, 'module.exports = ')
|
|
240
|
-
.replace(/^export\s+function\s+(\w+)/m, 'module.exports = function $1');
|
|
241
|
-
// If still no module.exports, wrap the whole thing
|
|
242
|
-
if (!wrapped.includes('module.exports')) {
|
|
243
|
-
wrapped = `module.exports = ${wrapped}`;
|
|
244
|
-
}
|
|
245
|
-
// Strip TypeScript type annotations for the sandbox (runs as JS)
|
|
246
|
-
wrapped = wrapped
|
|
247
|
-
.replace(/:\s*IRNode/g, '')
|
|
248
|
-
.replace(/:\s*string\[\]/g, '')
|
|
249
|
-
.replace(/:\s*CodegenHelpers/g, '')
|
|
250
|
-
.replace(/import\s+.*?from\s+['"].*?['"];?\n?/g, '');
|
|
251
|
-
return wrapped;
|
|
252
213
|
}
|
|
253
214
|
//# sourceMappingURL=evolve-validator-v4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evolve-validator-v4.js","sourceRoot":"","sources":["../src/evolve-validator-v4.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"evolve-validator-v4.js","sourceRoot":"","sources":["../src/evolve-validator-v4.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernlang/evolve",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.6",
|
|
4
4
|
"description": "Kern Evolve — self-extending template system: detect gaps, propose templates, validate, stage",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
"license": "AGPL-3.0",
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ts-morph": "^27.0.0",
|
|
28
|
-
"@kernlang/core": "3.1.
|
|
29
|
-
"@kernlang/review": "3.1.
|
|
28
|
+
"@kernlang/core": "3.1.6",
|
|
29
|
+
"@kernlang/review": "3.1.6"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc -b",
|
|
33
|
-
"test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js --
|
|
33
|
+
"test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js --config jest.config.js"
|
|
34
34
|
}
|
|
35
35
|
}
|