@kernlang/terminal 2.0.0 → 3.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.
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/transpiler-ink.d.ts +2 -0
- package/dist/transpiler-ink.js +775 -0
- package/dist/transpiler-ink.js.map +1 -0
- package/package.json +6 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @kernlang/terminal — ANSI terminal rendering transpiler
|
|
2
|
+
* @kernlang/terminal — ANSI terminal rendering transpiler + Ink (React) transpiler
|
|
3
3
|
*/
|
|
4
4
|
export { transpileTerminal } from './transpiler-terminal.js';
|
|
5
|
+
export { transpileInk } from './transpiler-ink.js';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @kernlang/terminal — ANSI terminal rendering transpiler
|
|
2
|
+
* @kernlang/terminal — ANSI terminal rendering transpiler + Ink (React) transpiler
|
|
3
3
|
*/
|
|
4
4
|
export { transpileTerminal } from './transpiler-terminal.js';
|
|
5
|
+
export { transpileInk } from './transpiler-ink.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,775 @@
|
|
|
1
|
+
import { countTokens, serializeIR, isCoreNode, generateCoreNode, generateMachineReducer } from '@kernlang/core';
|
|
2
|
+
/**
|
|
3
|
+
* Ink Transpiler — generates React (Ink) TSX components for terminal UIs
|
|
4
|
+
*
|
|
5
|
+
* Maps KERN terminal nodes to Ink components:
|
|
6
|
+
* screen → React function component (export default)
|
|
7
|
+
* text → <Text bold color="blue">...</Text>
|
|
8
|
+
* box → <Box borderStyle="round" borderColor="blue">...</Box>
|
|
9
|
+
* separator → <Text dimColor>{'─'.repeat(48)}</Text>
|
|
10
|
+
* table → <Box flexDirection="column"> with row components
|
|
11
|
+
* scoreboard → <Box flexDirection="column"> with metric rows
|
|
12
|
+
* spinner → <Text><Spinner /> {message}</Text>
|
|
13
|
+
* progress → <Box><Text>{bar}</Text></Box>
|
|
14
|
+
* gradient → <Text>{gradientChars}</Text>
|
|
15
|
+
* state → const [x, setX] = useState(initial)
|
|
16
|
+
* ref → const xRef = useRef(initial)
|
|
17
|
+
* stream → useEffect with async generator iteration (streaming output)
|
|
18
|
+
* logic → useEffect with side-effect code
|
|
19
|
+
* machine → standard output + useReducer hook
|
|
20
|
+
* conditional → {condition && (<>...</>)}
|
|
21
|
+
* input-area → <Box> at bottom of screen (persistent input region)
|
|
22
|
+
* output-area → <Box flexGrow={1}> scrollable output region
|
|
23
|
+
* text-input → <TextInput value={...} onChange={...} />
|
|
24
|
+
* select-input → <SelectInput items={...} onSelect={...} />
|
|
25
|
+
* handler → raw JSX injection
|
|
26
|
+
*/
|
|
27
|
+
// ── Helpers ──────────────────────────────────────────────────────────────
|
|
28
|
+
function getProps(node) {
|
|
29
|
+
return node.props || {};
|
|
30
|
+
}
|
|
31
|
+
function getChildren(node, type) {
|
|
32
|
+
const c = node.children || [];
|
|
33
|
+
return type ? c.filter(ch => ch.type === type) : c;
|
|
34
|
+
}
|
|
35
|
+
function capitalize(s) {
|
|
36
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
37
|
+
}
|
|
38
|
+
/** Check if a prop value is a {{ expression }} object from the parser. */
|
|
39
|
+
function isExpr(v) {
|
|
40
|
+
return typeof v === 'object' && v !== null && '__expr' in v;
|
|
41
|
+
}
|
|
42
|
+
/** Unwrap a prop value: expressions return their code, strings return as-is. */
|
|
43
|
+
function unwrapProp(v) {
|
|
44
|
+
if (isExpr(v))
|
|
45
|
+
return v.code;
|
|
46
|
+
return String(v ?? '');
|
|
47
|
+
}
|
|
48
|
+
/** Strip common leading whitespace from multiline handler code. */
|
|
49
|
+
function dedent(code) {
|
|
50
|
+
const lines = code.split('\n');
|
|
51
|
+
const nonEmpty = lines.filter(l => l.trim().length > 0);
|
|
52
|
+
if (nonEmpty.length === 0)
|
|
53
|
+
return code;
|
|
54
|
+
const min = Math.min(...nonEmpty.map(l => l.match(/^(\s*)/)?.[1].length ?? 0));
|
|
55
|
+
return lines.map(l => l.slice(min)).join('\n');
|
|
56
|
+
}
|
|
57
|
+
/** Split a comma-separated prop string while respecting angle-bracket/paren depth. */
|
|
58
|
+
function splitPropsRespectingDepth(s) {
|
|
59
|
+
const parts = [];
|
|
60
|
+
let depth = 0;
|
|
61
|
+
let current = '';
|
|
62
|
+
for (const ch of s) {
|
|
63
|
+
if (ch === '<' || ch === '(')
|
|
64
|
+
depth++;
|
|
65
|
+
else if (ch === '>' || ch === ')')
|
|
66
|
+
depth--;
|
|
67
|
+
if (ch === ',' && depth === 0) {
|
|
68
|
+
parts.push(current);
|
|
69
|
+
current = '';
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
current += ch;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (current.trim())
|
|
76
|
+
parts.push(current);
|
|
77
|
+
return parts;
|
|
78
|
+
}
|
|
79
|
+
/** Convert KERN condition to JS expression — handles __expr and shorthand. */
|
|
80
|
+
function irConditionToJs(cond) {
|
|
81
|
+
if (isExpr(cond))
|
|
82
|
+
return cond.code;
|
|
83
|
+
return String(cond)
|
|
84
|
+
.replace(/&/g, ' && ')
|
|
85
|
+
.replace(/([a-zA-Z_]+)=([a-zA-Z_]+)/g, "$1 === '$2'");
|
|
86
|
+
}
|
|
87
|
+
/** Convert KERN style value to Ink-compatible color prop */
|
|
88
|
+
function inkColor(color) {
|
|
89
|
+
if (typeof color === 'number')
|
|
90
|
+
return `{${color}}`;
|
|
91
|
+
if (typeof color === 'string') {
|
|
92
|
+
if (color.startsWith('#'))
|
|
93
|
+
return `"${color}"`;
|
|
94
|
+
return `"${color}"`;
|
|
95
|
+
}
|
|
96
|
+
return '"white"';
|
|
97
|
+
}
|
|
98
|
+
/** Ink key name → key object property check */
|
|
99
|
+
function keyToCheck(key) {
|
|
100
|
+
switch (key) {
|
|
101
|
+
case 'return':
|
|
102
|
+
case 'Enter': return 'key.return';
|
|
103
|
+
case 'escape':
|
|
104
|
+
case 'Escape': return 'key.escape';
|
|
105
|
+
case 'tab':
|
|
106
|
+
case 'Tab': return 'key.tab';
|
|
107
|
+
case 'up':
|
|
108
|
+
case 'ArrowUp': return 'key.upArrow';
|
|
109
|
+
case 'down':
|
|
110
|
+
case 'ArrowDown': return 'key.downArrow';
|
|
111
|
+
case 'left':
|
|
112
|
+
case 'ArrowLeft': return 'key.leftArrow';
|
|
113
|
+
case 'right':
|
|
114
|
+
case 'ArrowRight': return 'key.rightArrow';
|
|
115
|
+
case 'backspace':
|
|
116
|
+
case 'Backspace': return 'key.backspace';
|
|
117
|
+
case 'delete':
|
|
118
|
+
case 'Delete': return 'key.delete';
|
|
119
|
+
default: return `input === '${key}'`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ── Import tracker ──────────────────────────────────────────────────────
|
|
123
|
+
class ImportTracker {
|
|
124
|
+
reactImports = new Set();
|
|
125
|
+
inkImports = new Set();
|
|
126
|
+
inkSpinner = false;
|
|
127
|
+
inkTextInput = false;
|
|
128
|
+
inkSelectInput = false;
|
|
129
|
+
addReact(name) { this.reactImports.add(name); }
|
|
130
|
+
addInk(name) { this.inkImports.add(name); }
|
|
131
|
+
needSpinner() { this.inkSpinner = true; }
|
|
132
|
+
needTextInput() { this.inkTextInput = true; }
|
|
133
|
+
needSelectInput() { this.inkSelectInput = true; }
|
|
134
|
+
emit() {
|
|
135
|
+
const lines = [];
|
|
136
|
+
if (this.reactImports.size > 0) {
|
|
137
|
+
lines.push(`import React, { ${[...this.reactImports].sort().join(', ')} } from 'react';`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
lines.push(`import React from 'react';`);
|
|
141
|
+
}
|
|
142
|
+
if (this.inkImports.size > 0) {
|
|
143
|
+
lines.push(`import { ${[...this.inkImports].sort().join(', ')} } from 'ink';`);
|
|
144
|
+
}
|
|
145
|
+
if (this.inkSpinner) {
|
|
146
|
+
lines.push(`import Spinner from 'ink-spinner';`);
|
|
147
|
+
}
|
|
148
|
+
if (this.inkTextInput) {
|
|
149
|
+
lines.push(`import TextInput from 'ink-text-input';`);
|
|
150
|
+
}
|
|
151
|
+
if (this.inkSelectInput) {
|
|
152
|
+
lines.push(`import SelectInput from 'ink-select-input';`);
|
|
153
|
+
}
|
|
154
|
+
return lines;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ── State block → useState ──────────────────────────────────────────────
|
|
158
|
+
function generateStateHook(stateNode, imports) {
|
|
159
|
+
const lines = [];
|
|
160
|
+
const props = getProps(stateNode);
|
|
161
|
+
const name = props.name;
|
|
162
|
+
const initialProp = props.initial;
|
|
163
|
+
if (name && initialProp !== undefined) {
|
|
164
|
+
imports.addReact('useState');
|
|
165
|
+
const initial = isExpr(initialProp)
|
|
166
|
+
? initialProp.code
|
|
167
|
+
: String(initialProp);
|
|
168
|
+
const initVal = isExpr(initialProp) ? initial
|
|
169
|
+
: initial === 'null' ? 'null'
|
|
170
|
+
: initial === 'true' ? 'true'
|
|
171
|
+
: initial === 'false' ? 'false'
|
|
172
|
+
: initial.startsWith('[') || initial.startsWith('{') ? initial
|
|
173
|
+
: isNaN(Number(initial)) ? `'${initial}'`
|
|
174
|
+
: String(initial);
|
|
175
|
+
const setter = `set${capitalize(name)}`;
|
|
176
|
+
lines.push(` const [${name}, ${setter}] = useState(${initVal});`);
|
|
177
|
+
}
|
|
178
|
+
return lines;
|
|
179
|
+
}
|
|
180
|
+
// ── Ref block → useRef (Feature #10) ────────────────────────────────────
|
|
181
|
+
function generateRefHook(refNode, imports) {
|
|
182
|
+
const lines = [];
|
|
183
|
+
const props = getProps(refNode);
|
|
184
|
+
const name = props.name;
|
|
185
|
+
const initialProp = props.initial;
|
|
186
|
+
if (name) {
|
|
187
|
+
imports.addReact('useRef');
|
|
188
|
+
const initVal = initialProp === undefined ? 'null'
|
|
189
|
+
: isExpr(initialProp) ? unwrapProp(initialProp)
|
|
190
|
+
: String(initialProp);
|
|
191
|
+
lines.push(` const ${name}Ref = useRef(${initVal});`);
|
|
192
|
+
}
|
|
193
|
+
return lines;
|
|
194
|
+
}
|
|
195
|
+
// ── Stream block → useEffect with async generator ───────────────────────
|
|
196
|
+
function generateStreamEffect(streamNode, imports) {
|
|
197
|
+
const lines = [];
|
|
198
|
+
const props = getProps(streamNode);
|
|
199
|
+
const name = props.name;
|
|
200
|
+
const source = props.source;
|
|
201
|
+
const append = props.append !== 'false'; // default true
|
|
202
|
+
if (name && source) {
|
|
203
|
+
imports.addReact('useEffect');
|
|
204
|
+
const setter = `set${capitalize(name)}`;
|
|
205
|
+
lines.push(` useEffect(() => {`);
|
|
206
|
+
lines.push(` let cancelled = false;`);
|
|
207
|
+
lines.push(` (async () => {`);
|
|
208
|
+
lines.push(` for await (const chunk of ${source}()) {`);
|
|
209
|
+
lines.push(` if (cancelled) break;`);
|
|
210
|
+
if (append) {
|
|
211
|
+
lines.push(` ${setter}(prev => [...prev, chunk]);`);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
lines.push(` ${setter}(chunk);`);
|
|
215
|
+
}
|
|
216
|
+
lines.push(` }`);
|
|
217
|
+
lines.push(` })();`);
|
|
218
|
+
lines.push(` return () => { cancelled = true; };`);
|
|
219
|
+
lines.push(` }, []);`);
|
|
220
|
+
}
|
|
221
|
+
return lines;
|
|
222
|
+
}
|
|
223
|
+
// ── Logic block → useEffect (Feature #8) ────────────────────────────────
|
|
224
|
+
function generateLogicEffect(logicNode, imports) {
|
|
225
|
+
const lines = [];
|
|
226
|
+
const props = getProps(logicNode);
|
|
227
|
+
const code = props.code || '';
|
|
228
|
+
const deps = props.deps;
|
|
229
|
+
if (code) {
|
|
230
|
+
imports.addReact('useEffect');
|
|
231
|
+
const dedented = dedent(code);
|
|
232
|
+
const depsStr = deps ? `[${deps}]` : '[]';
|
|
233
|
+
lines.push(` useEffect(() => {`);
|
|
234
|
+
for (const line of dedented.split('\n')) {
|
|
235
|
+
lines.push(` ${line}`);
|
|
236
|
+
}
|
|
237
|
+
lines.push(` }, ${depsStr});`);
|
|
238
|
+
}
|
|
239
|
+
return lines;
|
|
240
|
+
}
|
|
241
|
+
// ── Callback block → useCallback (Feature #11) ─────────────────────────
|
|
242
|
+
function generateCallbackHook(callbackNode, imports) {
|
|
243
|
+
const lines = [];
|
|
244
|
+
const props = getProps(callbackNode);
|
|
245
|
+
const name = props.name;
|
|
246
|
+
const params = props.params || '';
|
|
247
|
+
const deps = props.deps;
|
|
248
|
+
const handlerChild = (callbackNode.children || []).find(c => c.type === 'handler');
|
|
249
|
+
const code = handlerChild ? (getProps(handlerChild).code || '') : '';
|
|
250
|
+
if (name && code) {
|
|
251
|
+
imports.addReact('useCallback');
|
|
252
|
+
const dedented = dedent(code);
|
|
253
|
+
const depsStr = deps ? `[${deps}]` : '[]';
|
|
254
|
+
const isAsync = props.async === 'true' || props.async === true;
|
|
255
|
+
const asyncKw = isAsync ? 'async ' : '';
|
|
256
|
+
lines.push(` const ${name} = useCallback(${asyncKw}(${params}) => {`);
|
|
257
|
+
for (const line of dedented.split('\n')) {
|
|
258
|
+
lines.push(` ${line}`);
|
|
259
|
+
}
|
|
260
|
+
lines.push(` }, ${depsStr});`);
|
|
261
|
+
}
|
|
262
|
+
return lines;
|
|
263
|
+
}
|
|
264
|
+
// ── Collect nested on-nodes from UI tree for hoisting (Bug #1) ─────────
|
|
265
|
+
function collectNestedOnNodes(node) {
|
|
266
|
+
const found = [];
|
|
267
|
+
for (const child of node.children || []) {
|
|
268
|
+
if (child.type === 'on') {
|
|
269
|
+
found.push(child);
|
|
270
|
+
}
|
|
271
|
+
else if (!['state', 'stream', 'logic', 'callback', 'ref'].includes(child.type) && !isCoreNode(child.type)) {
|
|
272
|
+
found.push(...collectNestedOnNodes(child));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return found;
|
|
276
|
+
}
|
|
277
|
+
// ── Generate useInput from an on-node ───────────────────────────────────
|
|
278
|
+
function generateOnHook(onNode, imports) {
|
|
279
|
+
const lines = [];
|
|
280
|
+
const onProps = getProps(onNode);
|
|
281
|
+
const event = (onProps.event || onProps.name);
|
|
282
|
+
if (event === 'key' || event === 'input') {
|
|
283
|
+
imports.addInk('useInput');
|
|
284
|
+
const key = onProps.key;
|
|
285
|
+
const handlerChild = (onNode.children || []).find(c => c.type === 'handler');
|
|
286
|
+
const code = handlerChild ? (getProps(handlerChild).code || '') : '';
|
|
287
|
+
lines.push(` useInput((input, key) => {`);
|
|
288
|
+
if (key) {
|
|
289
|
+
lines.push(` if (!(${keyToCheck(key)})) return;`);
|
|
290
|
+
}
|
|
291
|
+
if (code) {
|
|
292
|
+
const dedented = dedent(code);
|
|
293
|
+
for (const line of dedented.split('\n')) {
|
|
294
|
+
lines.push(` ${line}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
lines.push(` });`);
|
|
298
|
+
lines.push('');
|
|
299
|
+
}
|
|
300
|
+
return lines;
|
|
301
|
+
}
|
|
302
|
+
// ── Node renderer → JSX ─────────────────────────────────────────────────
|
|
303
|
+
function renderInkNode(node, indent, imports) {
|
|
304
|
+
const p = getProps(node);
|
|
305
|
+
const lines = [];
|
|
306
|
+
switch (node.type) {
|
|
307
|
+
case 'text': {
|
|
308
|
+
imports.addInk('Text');
|
|
309
|
+
// Bug #2: Handle __expr objects for dynamic text values
|
|
310
|
+
const rawValue = p.value;
|
|
311
|
+
const styles = p.styles || {};
|
|
312
|
+
const textProps = [];
|
|
313
|
+
if (styles.fw === 'bold' || styles.bold)
|
|
314
|
+
textProps.push('bold');
|
|
315
|
+
if (styles.dim)
|
|
316
|
+
textProps.push('dimColor');
|
|
317
|
+
if (styles.italic)
|
|
318
|
+
textProps.push('italic');
|
|
319
|
+
if (styles.c || styles.color)
|
|
320
|
+
textProps.push(`color=${inkColor(styles.c || styles.color)}`);
|
|
321
|
+
if (styles.bg)
|
|
322
|
+
textProps.push(`backgroundColor=${inkColor(styles.bg)}`);
|
|
323
|
+
const propsStr = textProps.length > 0 ? ' ' + textProps.join(' ') : '';
|
|
324
|
+
if (isExpr(rawValue)) {
|
|
325
|
+
lines.push(`${indent}<Text${propsStr}>{${rawValue.code}}</Text>`);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
const value = String(rawValue ?? '');
|
|
329
|
+
lines.push(`${indent}<Text${propsStr}>{${JSON.stringify(value)}}</Text>`);
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 'separator': {
|
|
334
|
+
imports.addInk('Text');
|
|
335
|
+
const width = Number(p.width) || 48;
|
|
336
|
+
lines.push(`${indent}<Text dimColor>{'${'─'.repeat(width)}'}</Text>`);
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
case 'box': {
|
|
340
|
+
imports.addInk('Box');
|
|
341
|
+
imports.addInk('Text');
|
|
342
|
+
const color = p.color;
|
|
343
|
+
const borderStyle = p.borderStyle || 'round';
|
|
344
|
+
const flexDirection = p.flexDirection;
|
|
345
|
+
const width = p.width;
|
|
346
|
+
const flexGrow = p.flexGrow;
|
|
347
|
+
const padding = p.padding;
|
|
348
|
+
const paddingX = p.paddingX;
|
|
349
|
+
const paddingY = p.paddingY;
|
|
350
|
+
const boxProps = [];
|
|
351
|
+
if (color)
|
|
352
|
+
boxProps.push(`borderStyle="${borderStyle}"`, `borderColor=${inkColor(color)}`);
|
|
353
|
+
if (flexDirection)
|
|
354
|
+
boxProps.push(`flexDirection="${flexDirection}"`);
|
|
355
|
+
if (width)
|
|
356
|
+
boxProps.push(`width={${width}}`);
|
|
357
|
+
if (flexGrow)
|
|
358
|
+
boxProps.push(`flexGrow={${flexGrow}}`);
|
|
359
|
+
if (padding)
|
|
360
|
+
boxProps.push(`padding={${padding}}`);
|
|
361
|
+
if (paddingX)
|
|
362
|
+
boxProps.push(`paddingX={${paddingX}}`);
|
|
363
|
+
if (paddingY)
|
|
364
|
+
boxProps.push(`paddingY={${paddingY}}`);
|
|
365
|
+
const propsStr = boxProps.length > 0 ? ' ' + boxProps.join(' ') : '';
|
|
366
|
+
lines.push(`${indent}<Box${propsStr}>`);
|
|
367
|
+
for (const child of node.children || []) {
|
|
368
|
+
// Skip nested on-nodes in JSX — they're hoisted to component body
|
|
369
|
+
if (child.type === 'on')
|
|
370
|
+
continue;
|
|
371
|
+
lines.push(...renderInkNode(child, indent + ' ', imports));
|
|
372
|
+
}
|
|
373
|
+
lines.push(`${indent}</Box>`);
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
case 'table': {
|
|
377
|
+
imports.addInk('Box');
|
|
378
|
+
imports.addInk('Text');
|
|
379
|
+
const headers = p.headers || '[]';
|
|
380
|
+
const rows = getChildren(node, 'row');
|
|
381
|
+
lines.push(`${indent}<Box flexDirection="column">`);
|
|
382
|
+
// Header row
|
|
383
|
+
lines.push(`${indent} <Box>`);
|
|
384
|
+
lines.push(`${indent} {(${headers} as string[]).map((h: string, i: number) => (`);
|
|
385
|
+
lines.push(`${indent} <Box key={i} width={20}><Text bold>{h}</Text></Box>`);
|
|
386
|
+
lines.push(`${indent} ))}`);
|
|
387
|
+
lines.push(`${indent} </Box>`);
|
|
388
|
+
// Separator
|
|
389
|
+
lines.push(`${indent} <Text dimColor>{'${'─'.repeat(60)}'}</Text>`);
|
|
390
|
+
// Data rows
|
|
391
|
+
for (const row of rows) {
|
|
392
|
+
const rowData = getProps(row).data || '[]';
|
|
393
|
+
lines.push(`${indent} <Box>`);
|
|
394
|
+
lines.push(`${indent} {(${rowData} as string[]).map((cell: string, i: number) => (`);
|
|
395
|
+
lines.push(`${indent} <Box key={i} width={20}><Text>{cell}</Text></Box>`);
|
|
396
|
+
lines.push(`${indent} ))}`);
|
|
397
|
+
lines.push(`${indent} </Box>`);
|
|
398
|
+
}
|
|
399
|
+
lines.push(`${indent}</Box>`);
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
case 'scoreboard': {
|
|
403
|
+
imports.addInk('Box');
|
|
404
|
+
imports.addInk('Text');
|
|
405
|
+
const title = p.title || 'Results';
|
|
406
|
+
const winner = p.winner || '';
|
|
407
|
+
const metrics = getChildren(node, 'metric');
|
|
408
|
+
lines.push(`${indent}<Box flexDirection="column">`);
|
|
409
|
+
lines.push(`${indent} <Text bold>{${JSON.stringify(title)}}</Text>`);
|
|
410
|
+
if (winner) {
|
|
411
|
+
lines.push(`${indent} <Text bold color="green">{'Winner: ${winner}'}</Text>`);
|
|
412
|
+
}
|
|
413
|
+
for (const metric of metrics) {
|
|
414
|
+
const mp = getProps(metric);
|
|
415
|
+
const mname = mp.name || '';
|
|
416
|
+
const values = mp.values || '[]';
|
|
417
|
+
lines.push(`${indent} <Box>`);
|
|
418
|
+
lines.push(`${indent} <Text dimColor>{${JSON.stringify(mname + ':')}}</Text>`);
|
|
419
|
+
lines.push(`${indent} <Text>{' '}{(${values} as string[]).join(' | ')}</Text>`);
|
|
420
|
+
lines.push(`${indent} </Box>`);
|
|
421
|
+
}
|
|
422
|
+
lines.push(`${indent}</Box>`);
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
case 'spinner': {
|
|
426
|
+
imports.addInk('Text');
|
|
427
|
+
imports.needSpinner();
|
|
428
|
+
const rawMsg = p.message;
|
|
429
|
+
const color = p.color;
|
|
430
|
+
const spinnerColor = color ? ` color=${inkColor(color)}` : '';
|
|
431
|
+
const msgContent = isExpr(rawMsg) ? `{${rawMsg.code}}` : `{' ${String(rawMsg ?? 'Loading...')}'}`;
|
|
432
|
+
lines.push(`${indent}<Text>`);
|
|
433
|
+
lines.push(`${indent} <Spinner${spinnerColor} />`);
|
|
434
|
+
lines.push(`${indent} ${msgContent}`);
|
|
435
|
+
lines.push(`${indent}</Text>`);
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
// Bug #3: Handle dynamic progress values via __expr
|
|
439
|
+
case 'progress': {
|
|
440
|
+
imports.addInk('Box');
|
|
441
|
+
imports.addInk('Text');
|
|
442
|
+
const rawValue = p.value;
|
|
443
|
+
const rawMax = p.max;
|
|
444
|
+
const color = p.color || 'green';
|
|
445
|
+
const barWidth = 20;
|
|
446
|
+
if (isExpr(rawValue) || isExpr(rawMax)) {
|
|
447
|
+
// Dynamic progress — compute at runtime
|
|
448
|
+
const valueExpr = isExpr(rawValue) ? rawValue.code : String(rawValue ?? 0);
|
|
449
|
+
const maxExpr = isExpr(rawMax) ? rawMax.code : String(rawMax ?? 100);
|
|
450
|
+
lines.push(`${indent}<Box>`);
|
|
451
|
+
lines.push(`${indent} {(() => {`);
|
|
452
|
+
lines.push(`${indent} const _pct = Math.min(1, Math.max(0, (${valueExpr}) / (${maxExpr})));`);
|
|
453
|
+
lines.push(`${indent} const _filled = Math.round(_pct * ${barWidth});`);
|
|
454
|
+
lines.push(`${indent} const _empty = ${barWidth} - _filled;`);
|
|
455
|
+
lines.push(`${indent} return (<>`);
|
|
456
|
+
lines.push(`${indent} <Text color=${inkColor(color)}>${'{'}'▓'.repeat(_filled)${'}'}</Text>`);
|
|
457
|
+
lines.push(`${indent} <Text>${'{'}'░'.repeat(_empty)${'}'}</Text>`);
|
|
458
|
+
lines.push(`${indent} <Text>{' ' + Math.round(_pct * 100) + '%'}</Text>`);
|
|
459
|
+
lines.push(`${indent} </>);`);
|
|
460
|
+
lines.push(`${indent} })()}`);
|
|
461
|
+
lines.push(`${indent}</Box>`);
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
// Static progress — compute at compile time
|
|
465
|
+
const value = Number(rawValue) || 0;
|
|
466
|
+
const max = Number(rawMax) || 100;
|
|
467
|
+
const pct = Math.min(1, Math.max(0, value / max));
|
|
468
|
+
const filled = Math.round(pct * barWidth);
|
|
469
|
+
const empty = barWidth - filled;
|
|
470
|
+
lines.push(`${indent}<Box>`);
|
|
471
|
+
lines.push(`${indent} <Text color=${inkColor(color)}>{'${'▓'.repeat(filled)}'}</Text>`);
|
|
472
|
+
lines.push(`${indent} <Text>{'${'░'.repeat(empty)}'}</Text>`);
|
|
473
|
+
lines.push(`${indent} <Text>{' ${Math.round(pct * 100)}%'}</Text>`);
|
|
474
|
+
lines.push(`${indent}</Box>`);
|
|
475
|
+
}
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
case 'gradient': {
|
|
479
|
+
imports.addInk('Text');
|
|
480
|
+
const text = p.text || '';
|
|
481
|
+
const colors = p.colors || '[]';
|
|
482
|
+
lines.push(`${indent}<Text>`);
|
|
483
|
+
lines.push(`${indent} {${JSON.stringify(text)}.split('').map((ch: string, i: number) => {`);
|
|
484
|
+
lines.push(`${indent} const colors = ${colors} as number[];`);
|
|
485
|
+
lines.push(`${indent} const colorIdx = Math.floor((i / ${text.length}) * colors.length);`);
|
|
486
|
+
lines.push(`${indent} const color = String(colors[Math.min(colorIdx, colors.length - 1)]);`);
|
|
487
|
+
lines.push(`${indent} return <Text key={i} color={color}>{ch}</Text>;`);
|
|
488
|
+
lines.push(`${indent} })}`);
|
|
489
|
+
lines.push(`${indent}</Text>`);
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
case 'input-area': {
|
|
493
|
+
imports.addInk('Box');
|
|
494
|
+
const children = node.children || [];
|
|
495
|
+
lines.push(`${indent}<Box flexDirection="column" borderStyle="single" borderColor="gray">`);
|
|
496
|
+
for (const child of children) {
|
|
497
|
+
if (child.type === 'on')
|
|
498
|
+
continue;
|
|
499
|
+
lines.push(...renderInkNode(child, indent + ' ', imports));
|
|
500
|
+
}
|
|
501
|
+
lines.push(`${indent}</Box>`);
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
case 'output-area': {
|
|
505
|
+
imports.addInk('Box');
|
|
506
|
+
const children = node.children || [];
|
|
507
|
+
lines.push(`${indent}<Box flexDirection="column" flexGrow={1}>`);
|
|
508
|
+
for (const child of children) {
|
|
509
|
+
if (child.type === 'on')
|
|
510
|
+
continue;
|
|
511
|
+
lines.push(...renderInkNode(child, indent + ' ', imports));
|
|
512
|
+
}
|
|
513
|
+
lines.push(`${indent}</Box>`);
|
|
514
|
+
break;
|
|
515
|
+
}
|
|
516
|
+
// Bug #4: Wire text-input value/onChange for controlled component
|
|
517
|
+
case 'text-input': {
|
|
518
|
+
imports.needTextInput();
|
|
519
|
+
const placeholder = p.placeholder || '';
|
|
520
|
+
const bind = p.bind;
|
|
521
|
+
const history = p.history;
|
|
522
|
+
const onSubmit = p.onSubmit;
|
|
523
|
+
const inputProps = [];
|
|
524
|
+
if (placeholder)
|
|
525
|
+
inputProps.push(`placeholder=${JSON.stringify(placeholder)}`);
|
|
526
|
+
if (history)
|
|
527
|
+
inputProps.push(`history={${history}}`);
|
|
528
|
+
if (bind) {
|
|
529
|
+
inputProps.push(`value={${bind}}`);
|
|
530
|
+
inputProps.push(`onChange={set${capitalize(bind)}}`);
|
|
531
|
+
}
|
|
532
|
+
if (onSubmit) {
|
|
533
|
+
inputProps.push(`onSubmit={${onSubmit}}`);
|
|
534
|
+
}
|
|
535
|
+
lines.push(`${indent}<TextInput ${inputProps.join(' ')} />`);
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
// Bug #5: Wire select-input onSelect handler
|
|
539
|
+
case 'select-input': {
|
|
540
|
+
imports.needSelectInput();
|
|
541
|
+
const rawItems = p.items;
|
|
542
|
+
const items = isExpr(rawItems) ? rawItems.code : (rawItems || '[]');
|
|
543
|
+
const onSelect = p.onSelect;
|
|
544
|
+
const selectProps = [`items={${items}}`];
|
|
545
|
+
if (onSelect) {
|
|
546
|
+
selectProps.push(`onSelect={${onSelect}}`);
|
|
547
|
+
}
|
|
548
|
+
lines.push(`${indent}<SelectInput ${selectProps.join(' ')} />`);
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
// Bug #6: Fix handler indentation — use dedent instead of trim
|
|
552
|
+
case 'handler': {
|
|
553
|
+
const code = p.code || '';
|
|
554
|
+
const dedented = dedent(code);
|
|
555
|
+
for (const line of dedented.split('\n')) {
|
|
556
|
+
lines.push(`${indent}${line}`);
|
|
557
|
+
}
|
|
558
|
+
break;
|
|
559
|
+
}
|
|
560
|
+
// Feature: each — JSX list iteration
|
|
561
|
+
// each collection={{items}} item=engine index=i key={{engine.id}}
|
|
562
|
+
// box ...
|
|
563
|
+
// → {items.map((engine, i) => (<Box key={engine.id}>...</Box>))}
|
|
564
|
+
case 'each': {
|
|
565
|
+
const rawCollection = p.collection;
|
|
566
|
+
const collection = isExpr(rawCollection) ? rawCollection.code : (rawCollection || '[]');
|
|
567
|
+
const item = p.item || 'item';
|
|
568
|
+
const index = p.index || 'i';
|
|
569
|
+
const rawKey = p.key;
|
|
570
|
+
const key = isExpr(rawKey) ? rawKey.code : (rawKey || index);
|
|
571
|
+
lines.push(`${indent}{${collection}.map((${item}, ${index}) => (`);
|
|
572
|
+
// If there's one child, render it directly with key; otherwise wrap in fragment
|
|
573
|
+
const children = node.children || [];
|
|
574
|
+
if (children.length === 1) {
|
|
575
|
+
const childLines = renderInkNode(children[0], indent + ' ', imports);
|
|
576
|
+
// Inject key prop into the first JSX opening tag
|
|
577
|
+
if (childLines.length > 0) {
|
|
578
|
+
childLines[0] = childLines[0].replace(/^(\s*<\w+)/, `$1 key={${key}}`);
|
|
579
|
+
}
|
|
580
|
+
lines.push(...childLines);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
lines.push(`${indent} <React.Fragment key={${key}}>`);
|
|
584
|
+
for (const child of children) {
|
|
585
|
+
lines.push(...renderInkNode(child, indent + ' ', imports));
|
|
586
|
+
}
|
|
587
|
+
lines.push(`${indent} </React.Fragment>`);
|
|
588
|
+
}
|
|
589
|
+
lines.push(`${indent}))}`);
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
// Feature #7: Conditional rendering
|
|
593
|
+
case 'conditional': {
|
|
594
|
+
const condition = p.if;
|
|
595
|
+
const jsCondition = irConditionToJs(condition ?? 'true');
|
|
596
|
+
lines.push(`${indent}{${jsCondition} && (`);
|
|
597
|
+
lines.push(`${indent} <>`);
|
|
598
|
+
for (const child of node.children || []) {
|
|
599
|
+
lines.push(...renderInkNode(child, indent + ' ', imports));
|
|
600
|
+
}
|
|
601
|
+
lines.push(`${indent} </>`);
|
|
602
|
+
lines.push(`${indent})}`);
|
|
603
|
+
break;
|
|
604
|
+
}
|
|
605
|
+
case 'state':
|
|
606
|
+
// Handled at component level as useState
|
|
607
|
+
break;
|
|
608
|
+
case 'ref':
|
|
609
|
+
// Handled at component level as useRef
|
|
610
|
+
break;
|
|
611
|
+
case 'stream':
|
|
612
|
+
// Handled at component level as useEffect with async generator
|
|
613
|
+
break;
|
|
614
|
+
case 'logic':
|
|
615
|
+
// Handled at component level as useEffect
|
|
616
|
+
break;
|
|
617
|
+
case 'callback':
|
|
618
|
+
// Handled at component level as useCallback
|
|
619
|
+
break;
|
|
620
|
+
// Bug #1: Nested on-nodes are hoisted — skip in JSX, emit comment
|
|
621
|
+
case 'on':
|
|
622
|
+
break;
|
|
623
|
+
default: {
|
|
624
|
+
// Core language nodes emit as-is (they're TypeScript, not JSX)
|
|
625
|
+
if (isCoreNode(node.type)) {
|
|
626
|
+
// Machine nodes get useReducer treatment in Ink
|
|
627
|
+
if (node.type === 'machine') {
|
|
628
|
+
lines.push(...generateMachineReducer(node).map(l => l));
|
|
629
|
+
}
|
|
630
|
+
else {
|
|
631
|
+
lines.push(...generateCoreNode(node));
|
|
632
|
+
}
|
|
633
|
+
break;
|
|
634
|
+
}
|
|
635
|
+
// Recurse into children for unknown nodes
|
|
636
|
+
if (node.children) {
|
|
637
|
+
for (const child of node.children) {
|
|
638
|
+
lines.push(...renderInkNode(child, indent, imports));
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
return lines;
|
|
644
|
+
}
|
|
645
|
+
// ── Main export ──────────────────────────────────────────────────────────
|
|
646
|
+
export function transpileInk(root, _config) {
|
|
647
|
+
const sourceMap = [];
|
|
648
|
+
const imports = new ImportTracker();
|
|
649
|
+
const lines = [];
|
|
650
|
+
const rootProps = getProps(root);
|
|
651
|
+
const screenName = rootProps.name || 'App';
|
|
652
|
+
// Feature #9: Component props from screen attributes
|
|
653
|
+
const propsAttr = rootProps.props;
|
|
654
|
+
const propParts = propsAttr ? splitPropsRespectingDepth(propsAttr) : [];
|
|
655
|
+
const propsParam = propParts.length > 0
|
|
656
|
+
? `{ ${propParts.map(p => p.trim().split(':')[0].trim()).join(', ')} }: { ${propParts.map(p => {
|
|
657
|
+
const trimmed = p.trim();
|
|
658
|
+
if (trimmed.includes(':'))
|
|
659
|
+
return trimmed;
|
|
660
|
+
return `${trimmed}: any`;
|
|
661
|
+
}).join('; ')} }`
|
|
662
|
+
: '';
|
|
663
|
+
// Separate node categories
|
|
664
|
+
const stateNodes = getChildren(root, 'state');
|
|
665
|
+
const refNodes = getChildren(root, 'ref');
|
|
666
|
+
const onNodes = getChildren(root, 'on');
|
|
667
|
+
const streamNodes = getChildren(root, 'stream');
|
|
668
|
+
const logicNodes = getChildren(root, 'logic');
|
|
669
|
+
const callbackNodes = getChildren(root, 'callback');
|
|
670
|
+
// In Ink context, 'each' is a UI node (.map iteration), not a core node (for...of loop)
|
|
671
|
+
const isInkUiNode = (type) => type === 'each' || type === 'conditional' || type === 'select'
|
|
672
|
+
|| type === 'model' || type === 'repository' || type === 'dependency' || type === 'cache';
|
|
673
|
+
const coreChildren = (root.children || []).filter(c => isCoreNode(c.type) && c.type !== 'on' && !isInkUiNode(c.type));
|
|
674
|
+
const uiChildren = (root.children || []).filter(c => c.type !== 'state' && c.type !== 'ref' && c.type !== 'on' && c.type !== 'stream'
|
|
675
|
+
&& c.type !== 'logic' && c.type !== 'callback' && (!isCoreNode(c.type) || isInkUiNode(c.type)));
|
|
676
|
+
// Bug #1: Collect nested on-nodes from UI tree and hoist to component level
|
|
677
|
+
const nestedOnNodes = collectNestedOnNodes(root);
|
|
678
|
+
// Deduplicate — top-level on-nodes are already in onNodes
|
|
679
|
+
const allOnNodes = [...onNodes];
|
|
680
|
+
for (const nested of nestedOnNodes) {
|
|
681
|
+
if (!onNodes.includes(nested)) {
|
|
682
|
+
allOnNodes.push(nested);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
// ── Core nodes emitted above component (types, interfaces, machines, events) ──
|
|
686
|
+
const coreLines = [];
|
|
687
|
+
if (coreChildren.length > 0) {
|
|
688
|
+
coreLines.push('// ── Core ───────────────────────────────────────────────');
|
|
689
|
+
for (const child of coreChildren) {
|
|
690
|
+
if (child.type === 'machine') {
|
|
691
|
+
// Machine nodes get useReducer treatment
|
|
692
|
+
imports.addReact('useReducer');
|
|
693
|
+
coreLines.push(...generateMachineReducer(child));
|
|
694
|
+
}
|
|
695
|
+
else {
|
|
696
|
+
coreLines.push(...generateCoreNode(child));
|
|
697
|
+
}
|
|
698
|
+
coreLines.push('');
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
// ── Component body ──
|
|
702
|
+
const bodyLines = [];
|
|
703
|
+
// State hooks
|
|
704
|
+
for (const stateNode of stateNodes) {
|
|
705
|
+
bodyLines.push(...generateStateHook(stateNode, imports));
|
|
706
|
+
}
|
|
707
|
+
if (stateNodes.length > 0)
|
|
708
|
+
bodyLines.push('');
|
|
709
|
+
// Ref hooks (Feature #10)
|
|
710
|
+
for (const refNode of refNodes) {
|
|
711
|
+
bodyLines.push(...generateRefHook(refNode, imports));
|
|
712
|
+
}
|
|
713
|
+
if (refNodes.length > 0)
|
|
714
|
+
bodyLines.push('');
|
|
715
|
+
// Callback hooks (Feature #11)
|
|
716
|
+
for (const callbackNode of callbackNodes) {
|
|
717
|
+
bodyLines.push(...generateCallbackHook(callbackNode, imports));
|
|
718
|
+
bodyLines.push('');
|
|
719
|
+
}
|
|
720
|
+
// on event=key → useInput() hooks (Bug #1: now includes hoisted nested on-nodes)
|
|
721
|
+
for (const onNode of allOnNodes) {
|
|
722
|
+
bodyLines.push(...generateOnHook(onNode, imports));
|
|
723
|
+
}
|
|
724
|
+
// Stream effects → useEffect with async generator iteration
|
|
725
|
+
for (const streamNode of streamNodes) {
|
|
726
|
+
bodyLines.push(...generateStreamEffect(streamNode, imports));
|
|
727
|
+
bodyLines.push('');
|
|
728
|
+
}
|
|
729
|
+
// Logic effects → useEffect (Feature #8)
|
|
730
|
+
for (const logicNode of logicNodes) {
|
|
731
|
+
bodyLines.push(...generateLogicEffect(logicNode, imports));
|
|
732
|
+
bodyLines.push('');
|
|
733
|
+
}
|
|
734
|
+
// JSX return
|
|
735
|
+
imports.addInk('Box');
|
|
736
|
+
bodyLines.push(' return (');
|
|
737
|
+
bodyLines.push(' <Box flexDirection="column">');
|
|
738
|
+
for (const child of uiChildren) {
|
|
739
|
+
bodyLines.push(...renderInkNode(child, ' ', imports));
|
|
740
|
+
}
|
|
741
|
+
bodyLines.push(' </Box>');
|
|
742
|
+
bodyLines.push(' );');
|
|
743
|
+
// ── Assemble ──
|
|
744
|
+
// Imports (computed last since renderInkNode populates the tracker)
|
|
745
|
+
lines.push(...imports.emit());
|
|
746
|
+
lines.push('');
|
|
747
|
+
// Core nodes
|
|
748
|
+
if (coreLines.length > 0) {
|
|
749
|
+
lines.push(...coreLines);
|
|
750
|
+
}
|
|
751
|
+
// Component (Feature #9: with props)
|
|
752
|
+
lines.push(`export default function ${screenName}(${propsParam}) {`);
|
|
753
|
+
lines.push(...bodyLines);
|
|
754
|
+
lines.push('}');
|
|
755
|
+
// Source map
|
|
756
|
+
sourceMap.push({
|
|
757
|
+
irLine: root.loc?.line || 0,
|
|
758
|
+
irCol: root.loc?.col || 1,
|
|
759
|
+
outLine: 1,
|
|
760
|
+
outCol: 1,
|
|
761
|
+
});
|
|
762
|
+
const code = lines.join('\n');
|
|
763
|
+
const irText = serializeIR(root);
|
|
764
|
+
const irTokenCount = countTokens(irText);
|
|
765
|
+
const tsTokenCount = countTokens(code);
|
|
766
|
+
const tokenReduction = Math.round((1 - irTokenCount / tsTokenCount) * 100);
|
|
767
|
+
return {
|
|
768
|
+
code,
|
|
769
|
+
sourceMap,
|
|
770
|
+
irTokenCount,
|
|
771
|
+
tsTokenCount,
|
|
772
|
+
tokenReduction,
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
//# sourceMappingURL=transpiler-ink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transpiler-ink.js","sourceRoot":"","sources":["../src/transpiler-ink.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kernlang/terminal",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Kern ANSI terminal rendering transpiler",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
|
-
".":
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
10
13
|
},
|
|
11
14
|
"files": [
|
|
12
15
|
"dist"
|
|
13
16
|
],
|
|
14
17
|
"license": "AGPL-3.0",
|
|
15
18
|
"dependencies": {
|
|
16
|
-
"@kernlang/core": "
|
|
19
|
+
"@kernlang/core": "3.0.0"
|
|
17
20
|
},
|
|
18
21
|
"scripts": {
|
|
19
22
|
"build": "tsc -b",
|