@kernlang/react 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,545 @@
1
+ /**
2
+ * KERN Structure Planner
3
+ *
4
+ * Target-agnostic module that splits an IRNode tree into multiple files
5
+ * based on a structure pattern (bulletproof, atomic, kern, flat).
6
+ *
7
+ * The planner classifies nodes by role, assigns them to files with correct
8
+ * paths per pattern, extracts hooks (state/logic), and resolves imports.
9
+ */
10
+ // ── Node Classification ──────────────────────────────────────────────────
11
+ const SURFACE_TYPES = new Set(['screen', 'page', 'modal']);
12
+ const BLOCK_TYPES = new Set(['card', 'section', 'form', 'list', 'grid', 'tabs']);
13
+ const CONTAINER_TYPES = new Set(['row', 'col']);
14
+ const ELEMENT_TYPES = new Set(['text', 'button', 'input', 'progress', 'separator', 'divider', 'image', 'icon', 'slider', 'toggle', 'tab', 'item']);
15
+ export function classifyNode(node) {
16
+ if (node.type === 'state')
17
+ return 'state';
18
+ if (node.type === 'logic' || node.type === 'handler')
19
+ return 'logic';
20
+ if (node.type === 'theme')
21
+ return 'theme';
22
+ if (node.type === 'metadata')
23
+ return 'meta';
24
+ if (SURFACE_TYPES.has(node.type))
25
+ return 'surface';
26
+ if (BLOCK_TYPES.has(node.type))
27
+ return 'block';
28
+ if (CONTAINER_TYPES.has(node.type))
29
+ return 'container';
30
+ if (ELEMENT_TYPES.has(node.type))
31
+ return 'element';
32
+ return 'element'; // fallback
33
+ }
34
+ // ── Component Name Helpers ───────────────────────────────────────────────
35
+ function getNodeName(node) {
36
+ const name = node.props?.name;
37
+ if (name)
38
+ return name;
39
+ // Derive from type: card → Card, section → Section
40
+ return node.type.charAt(0).toUpperCase() + node.type.slice(1);
41
+ }
42
+ function getFeatureName(root) {
43
+ return root.props?.name || 'Component';
44
+ }
45
+ function toComponentName(base, featureName, hasExplicitName) {
46
+ // If the node has an explicit name prop, use it as-is
47
+ if (hasExplicitName)
48
+ return base;
49
+ // Generic type-derived names get prefixed: Card → DashboardCard
50
+ const generic = ['Card', 'Section', 'Form', 'List', 'Grid', 'Tabs', 'Modal'];
51
+ if (generic.includes(base)) {
52
+ return `${featureName}${base}`;
53
+ }
54
+ return base;
55
+ }
56
+ function toCamelCase(name) {
57
+ return name.charAt(0).toLowerCase() + name.slice(1);
58
+ }
59
+ // ── Deduplication ────────────────────────────────────────────────────────
60
+ function deduplicateName(name, usedNames) {
61
+ if (!usedNames.has(name)) {
62
+ usedNames.add(name);
63
+ return name;
64
+ }
65
+ let idx = 2;
66
+ while (usedNames.has(`${name}${idx}`))
67
+ idx++;
68
+ const deduped = `${name}${idx}`;
69
+ usedNames.add(deduped);
70
+ return deduped;
71
+ }
72
+ function collectExtractableNodes(root) {
73
+ const result = {
74
+ stateNodes: [],
75
+ logicNodes: [],
76
+ blockNodes: [],
77
+ themeNodes: [],
78
+ remainingChildren: [],
79
+ };
80
+ for (const child of root.children || []) {
81
+ const role = classifyNode(child);
82
+ switch (role) {
83
+ case 'state':
84
+ result.stateNodes.push(child);
85
+ break;
86
+ case 'logic':
87
+ result.logicNodes.push(child);
88
+ break;
89
+ case 'block':
90
+ result.blockNodes.push(child);
91
+ break;
92
+ case 'theme':
93
+ result.themeNodes.push(child);
94
+ break;
95
+ default:
96
+ result.remainingChildren.push(child);
97
+ break;
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ // ── Hook Extraction ──────────────────────────────────────────────────────
103
+ export function extractHooks(featureName, stateNodes, logicNodes, hooksDir) {
104
+ const hooks = [];
105
+ if (stateNodes.length > 0) {
106
+ const stateDecls = stateNodes.map(n => ({
107
+ name: n.props?.name || 'value',
108
+ initial: String(n.props?.initial ?? ''),
109
+ }));
110
+ const returnedValues = [];
111
+ for (const s of stateDecls) {
112
+ const setter = `set${s.name.charAt(0).toUpperCase() + s.name.slice(1)}`;
113
+ returnedValues.push(s.name, setter);
114
+ }
115
+ hooks.push({
116
+ hookName: `use${featureName}State`,
117
+ path: `${hooksDir}/use${featureName}State.ts`,
118
+ stateDecls,
119
+ logicBlocks: [],
120
+ returnedValues,
121
+ importedBy: [],
122
+ });
123
+ }
124
+ if (logicNodes.length > 0) {
125
+ const logicBlocks = logicNodes.map(n => n.props?.code || '');
126
+ // Determine which state values the logic blocks reference
127
+ const returnedValues = [];
128
+ const allCode = logicBlocks.join('\n');
129
+ // Extract function/const names that would be returned
130
+ const fnMatches = allCode.match(/(?:const|function)\s+(\w+)/g);
131
+ if (fnMatches) {
132
+ for (const m of fnMatches) {
133
+ const name = m.replace(/^(?:const|function)\s+/, '');
134
+ returnedValues.push(name);
135
+ }
136
+ }
137
+ hooks.push({
138
+ hookName: `use${featureName}Logic`,
139
+ path: `${hooksDir}/use${featureName}Logic.ts`,
140
+ stateDecls: [],
141
+ logicBlocks,
142
+ returnedValues,
143
+ importedBy: [],
144
+ });
145
+ }
146
+ return hooks;
147
+ }
148
+ // ── Generate Hook File Content ───────────────────────────────────────────
149
+ export function generateStateHookCode(hook) {
150
+ const lines = [];
151
+ lines.push(`import { useState } from 'react';`);
152
+ lines.push('');
153
+ lines.push(`export function ${hook.hookName}() {`);
154
+ for (const s of hook.stateDecls) {
155
+ const setter = `set${s.name.charAt(0).toUpperCase() + s.name.slice(1)}`;
156
+ const init = s.initial === 'true' ? 'true'
157
+ : s.initial === 'false' ? 'false'
158
+ : s.initial === '' ? "''"
159
+ : isNaN(Number(s.initial)) ? `'${s.initial}'`
160
+ : s.initial;
161
+ lines.push(` const [${s.name}, ${setter}] = useState(${init});`);
162
+ }
163
+ lines.push('');
164
+ lines.push(` return { ${hook.returnedValues.join(', ')} };`);
165
+ lines.push('}');
166
+ return lines.join('\n');
167
+ }
168
+ export function generateLogicHookCode(hook, stateHookName) {
169
+ const lines = [];
170
+ // Detect needed React imports
171
+ const allCode = hook.logicBlocks.join('\n');
172
+ const reactHooks = [];
173
+ if (allCode.includes('useEffect'))
174
+ reactHooks.push('useEffect');
175
+ if (allCode.includes('useCallback'))
176
+ reactHooks.push('useCallback');
177
+ if (allCode.includes('useMemo'))
178
+ reactHooks.push('useMemo');
179
+ if (allCode.includes('useRef'))
180
+ reactHooks.push('useRef');
181
+ if (reactHooks.length > 0) {
182
+ lines.push(`import { ${reactHooks.join(', ')} } from 'react';`);
183
+ }
184
+ if (stateHookName) {
185
+ lines.push(`import { ${stateHookName} } from './${stateHookName}';`);
186
+ }
187
+ if (reactHooks.length > 0 || stateHookName) {
188
+ lines.push('');
189
+ }
190
+ lines.push(`export function ${hook.hookName}() {`);
191
+ if (stateHookName) {
192
+ lines.push(` const state = ${stateHookName}();`);
193
+ }
194
+ for (const block of hook.logicBlocks) {
195
+ for (const line of block.split('\n')) {
196
+ lines.push(` ${line}`);
197
+ }
198
+ lines.push('');
199
+ }
200
+ if (hook.returnedValues.length > 0) {
201
+ lines.push(` return { ${hook.returnedValues.join(', ')} };`);
202
+ }
203
+ lines.push('}');
204
+ return lines.join('\n');
205
+ }
206
+ // ── Generate Types File Content ──────────────────────────────────────────
207
+ export function generateTypesCode(featureName, stateDecls) {
208
+ const lines = [];
209
+ lines.push(`export interface ${featureName}Props {`);
210
+ for (const s of stateDecls) {
211
+ const setter = `set${s.name.charAt(0).toUpperCase() + s.name.slice(1)}`;
212
+ const tsType = s.initial === 'true' || s.initial === 'false' ? 'boolean'
213
+ : !isNaN(Number(s.initial)) && s.initial !== '' ? 'number'
214
+ : 'string';
215
+ lines.push(` ${s.name}: ${tsType};`);
216
+ lines.push(` ${setter}: (value: ${tsType}) => void;`);
217
+ }
218
+ lines.push('}');
219
+ return lines.join('\n');
220
+ }
221
+ // ── Generate Barrel Export Content ────────────────────────────────────────
222
+ export function generateBarrelCode(barrel) {
223
+ return barrel.exports
224
+ .map(e => `export { ${e.name} } from '${e.from}';`)
225
+ .join('\n');
226
+ }
227
+ // ── Pattern Planners ─────────────────────────────────────────────────────
228
+ function planBulletproof(root) {
229
+ const featureName = getFeatureName(root);
230
+ const featureDir = `features/${toCamelCase(featureName)}`;
231
+ const { stateNodes, logicNodes, blockNodes, themeNodes } = collectExtractableNodes(root);
232
+ const usedNames = new Set();
233
+ const files = [];
234
+ // Entry component
235
+ files.push({
236
+ path: `${featureDir}/index.tsx`,
237
+ artifactType: 'entry',
238
+ nodes: [root],
239
+ rootNode: root,
240
+ dependsOn: [],
241
+ isEntry: true,
242
+ });
243
+ // Block components → components/
244
+ for (const block of blockNodes) {
245
+ const rawName = getNodeName(block);
246
+ const hasExplicitName = !!(block.props?.name);
247
+ const compName = deduplicateName(toComponentName(rawName, featureName, hasExplicitName), usedNames);
248
+ files.push({
249
+ path: `${featureDir}/components/${compName}.tsx`,
250
+ artifactType: 'component',
251
+ nodes: [block],
252
+ rootNode: block,
253
+ dependsOn: [`${featureDir}/index.tsx`],
254
+ isEntry: false,
255
+ componentName: compName,
256
+ });
257
+ }
258
+ // Hooks
259
+ const hooks = extractHooks(featureName, stateNodes, logicNodes, `${featureDir}/hooks`);
260
+ for (const hook of hooks) {
261
+ files.push({
262
+ path: hook.path,
263
+ artifactType: 'hook',
264
+ nodes: hook.stateDecls.length > 0 ? stateNodes : logicNodes,
265
+ rootNode: root,
266
+ dependsOn: [],
267
+ isEntry: false,
268
+ });
269
+ }
270
+ // Types (if state exists)
271
+ if (stateNodes.length > 0) {
272
+ files.push({
273
+ path: `${featureDir}/types/${toCamelCase(featureName)}.types.ts`,
274
+ artifactType: 'types',
275
+ nodes: stateNodes,
276
+ rootNode: root,
277
+ dependsOn: [],
278
+ isEntry: false,
279
+ });
280
+ }
281
+ // Theme
282
+ if (themeNodes.length > 0) {
283
+ files.push({
284
+ path: `${featureDir}/theme.ts`,
285
+ artifactType: 'theme',
286
+ nodes: themeNodes,
287
+ rootNode: root,
288
+ dependsOn: [],
289
+ isEntry: false,
290
+ });
291
+ }
292
+ // Barrel re-export (separate from entry index.tsx)
293
+ const barrels = [{
294
+ path: `${featureDir}/barrel.ts`,
295
+ exports: [{ name: featureName, from: './index' }],
296
+ }];
297
+ // Wire up dependencies
298
+ const entryFile = files[0];
299
+ const componentPaths = files.filter(f => f.artifactType === 'component').map(f => f.path);
300
+ const hookPaths = files.filter(f => f.artifactType === 'hook').map(f => f.path);
301
+ entryFile.dependsOn = [...componentPaths, ...hookPaths];
302
+ return { files, barrels };
303
+ }
304
+ function planAtomic(root) {
305
+ const featureName = getFeatureName(root);
306
+ const { stateNodes, logicNodes, blockNodes, themeNodes, remainingChildren } = collectExtractableNodes(root);
307
+ const usedNames = new Set();
308
+ const files = [];
309
+ // Page → pages/
310
+ files.push({
311
+ path: `pages/${featureName}Page.tsx`,
312
+ artifactType: 'page',
313
+ nodes: [root],
314
+ rootNode: root,
315
+ dependsOn: [],
316
+ isEntry: true,
317
+ });
318
+ // Template → templates/
319
+ files.push({
320
+ path: `templates/${featureName}Template.tsx`,
321
+ artifactType: 'template',
322
+ nodes: [root],
323
+ rootNode: root,
324
+ dependsOn: [],
325
+ isEntry: false,
326
+ });
327
+ // Blocks → organisms/
328
+ for (const block of blockNodes) {
329
+ const rawName = getNodeName(block);
330
+ const hasExplicitName = !!(block.props?.name);
331
+ const compName = deduplicateName(toComponentName(rawName, featureName, hasExplicitName), usedNames);
332
+ files.push({
333
+ path: `organisms/${compName}.tsx`,
334
+ artifactType: 'component',
335
+ nodes: [block],
336
+ rootNode: block,
337
+ dependsOn: [],
338
+ isEntry: false,
339
+ componentName: compName,
340
+ });
341
+ }
342
+ // Containers with children (molecules) and elements (atoms)
343
+ const molecules = [];
344
+ const atoms = [];
345
+ for (const child of remainingChildren) {
346
+ const role = classifyNode(child);
347
+ if (role === 'container' && child.children && child.children.length > 0) {
348
+ molecules.push(child);
349
+ }
350
+ else if (role === 'element') {
351
+ atoms.push(child);
352
+ }
353
+ }
354
+ // Also extract atoms from within blocks
355
+ for (const block of blockNodes) {
356
+ if (block.children) {
357
+ for (const child of block.children) {
358
+ const role = classifyNode(child);
359
+ if (role === 'element' && child.props?.name) {
360
+ atoms.push(child);
361
+ }
362
+ }
363
+ }
364
+ }
365
+ for (const mol of molecules) {
366
+ const rawName = getNodeName(mol);
367
+ const compName = deduplicateName(rawName, usedNames);
368
+ files.push({
369
+ path: `molecules/${compName}.tsx`,
370
+ artifactType: 'component',
371
+ nodes: [mol],
372
+ rootNode: mol,
373
+ dependsOn: [],
374
+ isEntry: false,
375
+ componentName: compName,
376
+ });
377
+ }
378
+ for (const atom of atoms) {
379
+ if (!atom.props?.name)
380
+ continue; // Only extract named elements
381
+ const rawName = getNodeName(atom);
382
+ const compName = deduplicateName(rawName, usedNames);
383
+ files.push({
384
+ path: `atoms/${compName}.tsx`,
385
+ artifactType: 'component',
386
+ nodes: [atom],
387
+ rootNode: atom,
388
+ dependsOn: [],
389
+ isEntry: false,
390
+ componentName: compName,
391
+ });
392
+ }
393
+ // Hooks
394
+ const hooks = extractHooks(featureName, stateNodes, logicNodes, 'hooks');
395
+ for (const hook of hooks) {
396
+ files.push({
397
+ path: hook.path,
398
+ artifactType: 'hook',
399
+ nodes: hook.stateDecls.length > 0 ? stateNodes : logicNodes,
400
+ rootNode: root,
401
+ dependsOn: [],
402
+ isEntry: false,
403
+ });
404
+ }
405
+ // Types
406
+ if (stateNodes.length > 0) {
407
+ files.push({
408
+ path: `types/${toCamelCase(featureName)}.types.ts`,
409
+ artifactType: 'types',
410
+ nodes: stateNodes,
411
+ rootNode: root,
412
+ dependsOn: [],
413
+ isEntry: false,
414
+ });
415
+ }
416
+ // Theme
417
+ if (themeNodes.length > 0) {
418
+ files.push({
419
+ path: `theme/${toCamelCase(featureName)}.theme.ts`,
420
+ artifactType: 'theme',
421
+ nodes: themeNodes,
422
+ rootNode: root,
423
+ dependsOn: [],
424
+ isEntry: false,
425
+ });
426
+ }
427
+ return { files, barrels: [] };
428
+ }
429
+ function planKern(root) {
430
+ const featureName = getFeatureName(root);
431
+ const { stateNodes, logicNodes, blockNodes, themeNodes } = collectExtractableNodes(root);
432
+ const usedNames = new Set();
433
+ const files = [];
434
+ // Surface
435
+ files.push({
436
+ path: `surfaces/${featureName}.surface.tsx`,
437
+ artifactType: 'entry',
438
+ nodes: [root],
439
+ rootNode: root,
440
+ dependsOn: [],
441
+ isEntry: true,
442
+ });
443
+ // Blocks
444
+ for (const block of blockNodes) {
445
+ const rawName = getNodeName(block);
446
+ const hasExplicitName = !!(block.props?.name);
447
+ const compName = deduplicateName(toComponentName(rawName, featureName, hasExplicitName), usedNames);
448
+ files.push({
449
+ path: `blocks/${compName}.block.tsx`,
450
+ artifactType: 'component',
451
+ nodes: [block],
452
+ rootNode: block,
453
+ dependsOn: [],
454
+ isEntry: false,
455
+ componentName: compName,
456
+ });
457
+ }
458
+ // Signals (split state + logic)
459
+ if (stateNodes.length > 0 || logicNodes.length > 0) {
460
+ const hooks = extractHooks(featureName, stateNodes, logicNodes, 'signals');
461
+ for (const hook of hooks) {
462
+ files.push({
463
+ path: hook.path,
464
+ artifactType: 'hook',
465
+ nodes: hook.stateDecls.length > 0 ? stateNodes : logicNodes,
466
+ rootNode: root,
467
+ dependsOn: [],
468
+ isEntry: false,
469
+ });
470
+ }
471
+ }
472
+ // Tokens (theme)
473
+ if (themeNodes.length > 0) {
474
+ files.push({
475
+ path: `tokens/${toCamelCase(featureName)}.tokens.ts`,
476
+ artifactType: 'theme',
477
+ nodes: themeNodes,
478
+ rootNode: root,
479
+ dependsOn: [],
480
+ isEntry: false,
481
+ });
482
+ }
483
+ // Models (types)
484
+ if (stateNodes.length > 0) {
485
+ files.push({
486
+ path: `models/${toCamelCase(featureName)}.model.ts`,
487
+ artifactType: 'types',
488
+ nodes: stateNodes,
489
+ rootNode: root,
490
+ dependsOn: [],
491
+ isEntry: false,
492
+ });
493
+ }
494
+ return { files, barrels: [] };
495
+ }
496
+ // ── Next.js Adapter ──────────────────────────────────────────────────────
497
+ export function adaptPlanForNextjs(plan, root) {
498
+ const isLayout = root.type === 'layout';
499
+ const isLoading = root.type === 'loading';
500
+ const isError = root.type === 'error';
501
+ // Find the entry file and adjust its path for Next.js conventions
502
+ for (const file of plan.files) {
503
+ if (file.isEntry) {
504
+ if (isLayout)
505
+ file.path = file.path.replace(/index\.tsx$|[^/]+\.surface\.tsx$|[^/]+Page\.tsx$/, 'layout.tsx');
506
+ else if (isLoading)
507
+ file.path = file.path.replace(/index\.tsx$|[^/]+\.surface\.tsx$|[^/]+Page\.tsx$/, 'loading.tsx');
508
+ else if (isError)
509
+ file.path = file.path.replace(/index\.tsx$|[^/]+\.surface\.tsx$|[^/]+Page\.tsx$/, 'error.tsx');
510
+ else {
511
+ // Default page — for bulletproof, keep index.tsx; for others, page.tsx
512
+ if (!file.path.includes('index.tsx')) {
513
+ file.path = file.path.replace(/[^/]+\.surface\.tsx$|[^/]+Page\.tsx$/, 'page.tsx');
514
+ }
515
+ }
516
+ }
517
+ }
518
+ return plan;
519
+ }
520
+ // ── Main Planner ─────────────────────────────────────────────────────────
521
+ export function planStructure(root, config) {
522
+ const structure = config.structure;
523
+ if (structure === 'flat')
524
+ return null; // Use existing flat code path
525
+ let plan;
526
+ switch (structure) {
527
+ case 'bulletproof':
528
+ plan = planBulletproof(root);
529
+ break;
530
+ case 'atomic':
531
+ plan = planAtomic(root);
532
+ break;
533
+ case 'kern':
534
+ plan = planKern(root);
535
+ break;
536
+ default:
537
+ return null;
538
+ }
539
+ // Apply Next.js adaptations if target is nextjs
540
+ if (config.target === 'nextjs') {
541
+ plan = adaptPlanForNextjs(plan, root);
542
+ }
543
+ return plan;
544
+ }
545
+ //# sourceMappingURL=structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structure.js","sourceRoot":"","sources":["../src/structure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { IRNode, TranspileResult, ResolvedKernConfig } from '@kernlang/core';
2
+ /**
3
+ * Next.js App Router Transpiler
4
+ *
5
+ * Extends the Tailwind transpiler with Next.js-specific features:
6
+ * - page / layout / loading / error node types → file conventions
7
+ * - metadata node → generateMetadata export
8
+ * - Server vs client components (client=true flag)
9
+ * - next/link, next/image, next/navigation imports
10
+ * - Multi-file output via TranspileResult.files
11
+ */
12
+ interface NextFile {
13
+ path: string;
14
+ content: string;
15
+ }
16
+ interface NextTranspileResult extends TranspileResult {
17
+ files: NextFile[];
18
+ }
19
+ export declare function transpileNextjs(root: IRNode, config?: ResolvedKernConfig): NextTranspileResult;
20
+ export {};