@frontiers-labs/argon 0.1.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,578 @@
1
+ // ── Public API ─────────────────────────────────────────────────────────────────
2
+ export function generateRust(module) {
3
+ const ctx = buildRustCtx(module);
4
+ const parts = [
5
+ '// Generated by Argon compiler — do not edit by hand.\n',
6
+ ];
7
+ // Inline struct types harvested from interface fields (e.g. Channels)
8
+ for (const s of ctx.inlineStructs.values()) {
9
+ parts.push(inlineStructToRust(s));
10
+ }
11
+ // Named interface structs
12
+ for (const iface of module.interfaces) {
13
+ parts.push(interfaceToRust(iface, ctx));
14
+ }
15
+ // Data match function(s)
16
+ for (const dc of module.dataConsts) {
17
+ parts.push(dataConstToRust(dc, module.interfaces, ctx));
18
+ }
19
+ // Helper functions (transpiled to Rust)
20
+ for (const fn of module.functions) {
21
+ parts.push(functionToRust(fn, ctx));
22
+ }
23
+ // CSS constant
24
+ const comp = module.component;
25
+ const stylesConst = `${toScreamingSnake(comp.className)}_STYLES`;
26
+ parts.push(`pub const ${stylesConst}: &str = ${rustRawStr(comp.styles)};\n`);
27
+ // Component struct + render()
28
+ parts.push(componentToRust(comp, ctx, stylesConst));
29
+ return parts.join('\n');
30
+ }
31
+ function buildRustCtx(module) {
32
+ const inlineStructs = new Map();
33
+ for (const iface of module.interfaces) {
34
+ for (const field of iface.fields) {
35
+ if (field.type.kind === 'object') {
36
+ inlineStructs.set(field.name, {
37
+ rustName: capitalize(field.name),
38
+ fields: field.type.fields,
39
+ });
40
+ }
41
+ }
42
+ }
43
+ return {
44
+ inlineStructs,
45
+ stylesConst: `${toScreamingSnake(module.component.className)}_STYLES`,
46
+ componentClassName: module.component.className,
47
+ usizeVars: new Set(),
48
+ preferF64: false,
49
+ };
50
+ }
51
+ // ── Inline structs ─────────────────────────────────────────────────────────────
52
+ function inlineStructToRust(s) {
53
+ const fields = s.fields.map(f => ` pub ${toSnake(f.name)}: ${irTypeToRust(f.type)},`);
54
+ return `#[derive(Debug, Clone)]\npub struct ${s.rustName} {\n${fields.join('\n')}\n}\n`;
55
+ }
56
+ // ── Interface → struct ─────────────────────────────────────────────────────────
57
+ function interfaceToRust(iface, ctx) {
58
+ const fields = iface.fields.map(f => {
59
+ const baseType = f.type.kind === 'object'
60
+ ? capitalize(f.name)
61
+ : irTypeToRust(f.type);
62
+ const fieldType = f.optional ? `Option<${baseType}>` : baseType;
63
+ return ` pub ${toSnake(f.name)}: ${fieldType},`;
64
+ });
65
+ return `#[derive(Debug, Clone)]\npub struct ${iface.name} {\n${fields.join('\n')}\n}\n`;
66
+ }
67
+ // ── Data const → match function ────────────────────────────────────────────────
68
+ function dataConstToRust(dc, interfaces, ctx) {
69
+ if (dc.value.kind !== 'object')
70
+ return `// Could not emit ${dc.name}\n`;
71
+ const firstVal = dc.value.properties[0]?.value;
72
+ if (!firstVal || firstVal.kind !== 'object')
73
+ return '';
74
+ const valueTypeName = findMatchingInterface(firstVal, interfaces) ?? 'Unknown';
75
+ const fnName = `get_${toSnake(dc.name).replace(/^data_/, '').toLowerCase() || 'data'}`;
76
+ const arms = dc.value.properties.map(({ key, value }) => {
77
+ const body = literalToRustStruct(value, valueTypeName, ctx);
78
+ return ` ${JSON.stringify(key)} => ${body},`;
79
+ });
80
+ return (`pub fn ${fnName}(key: &str) -> ${valueTypeName} {\n` +
81
+ ` match key {\n` +
82
+ arms.join('\n') + '\n' +
83
+ ` _ => panic!("Unknown key: {}", key),\n` +
84
+ ` }\n` +
85
+ `}\n`);
86
+ }
87
+ function findMatchingInterface(lit, interfaces) {
88
+ if (lit.kind !== 'object')
89
+ return null;
90
+ const keys = new Set(lit.properties.map(p => p.key));
91
+ for (const iface of interfaces) {
92
+ const ifaceKeys = new Set(iface.fields.map(f => f.name));
93
+ if ([...keys].every(k => ifaceKeys.has(k)))
94
+ return iface.name;
95
+ }
96
+ return null;
97
+ }
98
+ // ── Literal → Rust struct construction ────────────────────────────────────────
99
+ function literalToRustStruct(lit, typeName, ctx) {
100
+ if (lit.kind !== 'object')
101
+ return literalToRustValue(lit, '', ctx);
102
+ const fields = lit.properties.map(({ key, value }) => ` ${toSnake(key)}: ${literalToRustValue(value, key, ctx)},`);
103
+ return `${typeName} {\n${fields.join('\n')}\n }`;
104
+ }
105
+ function literalToRustValue(lit, fieldName, ctx) {
106
+ switch (lit.kind) {
107
+ case 'string': return `${JSON.stringify(lit.value)}.to_string()`;
108
+ case 'number': return Number.isInteger(lit.value) ? `${lit.value}.0` : String(lit.value);
109
+ case 'boolean': return String(lit.value);
110
+ case 'array':
111
+ return `vec![${lit.elements.map(e => literalToRustValue(e, fieldName, ctx)).join(', ')}]`;
112
+ case 'object': {
113
+ const inlineStruct = ctx.inlineStructs.get(fieldName);
114
+ const structName = inlineStruct?.rustName ?? capitalize(fieldName);
115
+ const fields = lit.properties.map(({ key, value }) => ` ${toSnake(key)}: ${literalToRustValue(value, key, ctx)},`);
116
+ return `${structName} {\n${fields.join('\n')}\n }`;
117
+ }
118
+ }
119
+ }
120
+ // ── Helper function → Rust fn ──────────────────────────────────────────────────
121
+ function functionToRust(fn, ctx) {
122
+ const hasArrayParam = fn.params.some(p => p.type.kind === 'array');
123
+ const returnTypeName = fn.returnType.kind === 'named' ? fn.returnType.name
124
+ : irTypeToRust(fn.returnType);
125
+ const params = fn.params.map(p => {
126
+ const t = irTypeToRust(p.type);
127
+ const byRef = p.type.kind === 'array' || p.type.kind === 'named';
128
+ return `${p.name}: ${byRef ? '&[' + irTypeToRust(p.type.element || p.type) + ']' : t}`;
129
+ });
130
+ // Fix params for array types
131
+ const fixedParams = fn.params.map(p => {
132
+ if (p.type.kind === 'array') {
133
+ return `${p.name}: &[${irTypeToRust(p.type.element)}]`;
134
+ }
135
+ return `${p.name}: ${irTypeToRust(p.type)}`;
136
+ });
137
+ const fnCtx = {
138
+ ...ctx,
139
+ usizeVars: new Set(),
140
+ preferF64: hasArrayParam,
141
+ returnType: returnTypeName,
142
+ };
143
+ const stmts = fn.body.map(s => stmtToRust(s, fnCtx));
144
+ return (`pub fn ${toSnake(fn.name)}(${fixedParams.join(', ')}) -> ${returnTypeName} {\n` +
145
+ stmts.map(s => ` ${s}`).join('\n') + '\n' +
146
+ `}\n`);
147
+ }
148
+ // ── Statement → Rust ───────────────────────────────────────────────────────────
149
+ function stmtToRust(stmt, ctx) {
150
+ switch (stmt.kind) {
151
+ case 'const': {
152
+ const rustNames = stmt.names.map(toSnake);
153
+ const init = stmt.init;
154
+ if (rustNames.length === 1) {
155
+ // Numeric literal in f64 context → explicit type annotation
156
+ if (ctx.preferF64 && init.kind === 'literal' && init.value.kind === 'number') {
157
+ const v = init.value.value;
158
+ const fval = Number.isInteger(v) ? `${v}.0` : String(v);
159
+ return `let ${rustNames[0]}: f64 = ${fval};`;
160
+ }
161
+ return `let ${rustNames[0]} = ${exprToRust(init, ctx)};`;
162
+ }
163
+ // Destructuring: const [lx, ly] = ...
164
+ return `let (${rustNames.join(', ')}) = ${exprToRust(init, ctx)};`;
165
+ }
166
+ case 'return':
167
+ return exprToRust(stmt.value, ctx);
168
+ case 'expr_stmt':
169
+ return `${exprToRust(stmt.expr, ctx)};`;
170
+ }
171
+ }
172
+ // ── Expression → Rust ──────────────────────────────────────────────────────────
173
+ function exprToRust(expr, ctx) {
174
+ switch (expr.kind) {
175
+ case 'self_field':
176
+ return `self.${toSnake(expr.field)}`;
177
+ case 'local_ref':
178
+ if (expr.name === '__styles__')
179
+ return ctx.stylesConst;
180
+ return toSnake(expr.name);
181
+ case 'literal':
182
+ return litToRust(expr.value, ctx);
183
+ case 'as_expr': {
184
+ // [x, y] as [number, number] → (x, y) tuple
185
+ const inner = expr.expr;
186
+ if (inner.kind === 'array_literal' && inner.elements.length >= 2) {
187
+ return `(${inner.elements.map(e => exprToRust(e, ctx)).join(', ')})`;
188
+ }
189
+ return exprToRust(inner, ctx);
190
+ }
191
+ case 'prop_access': {
192
+ if (expr.property === 'length') {
193
+ return `${exprToRust(expr.object, ctx)}.len()`;
194
+ }
195
+ return `${exprToRust(expr.object, ctx)}.${toSnake(expr.property)}`;
196
+ }
197
+ case 'index': {
198
+ // DATA[key] → get_data(&key)
199
+ if (expr.object.kind === 'local_ref' && expr.object.name === 'DATA') {
200
+ const key = exprToRust(expr.index, ctx);
201
+ // self.field → &self.field for string slice
202
+ const ref = expr.index.kind === 'self_field' ? `&${key}` : key;
203
+ return `get_data(${ref})`;
204
+ }
205
+ const obj = exprToRust(expr.object, ctx);
206
+ const idx = indexExprToRust(expr.index, ctx);
207
+ return `${obj}[${idx}]`;
208
+ }
209
+ case 'call': {
210
+ // Math.min(...arr) / Math.max(...arr)
211
+ if ((expr.callee === 'Math.min' || expr.callee === 'Math.max') &&
212
+ expr.args.length === 1 &&
213
+ expr.args[0].kind === 'spread') {
214
+ const arr = exprToRust(expr.args[0].expr, ctx);
215
+ const init = expr.callee === 'Math.min' ? 'f64::INFINITY' : 'f64::NEG_INFINITY';
216
+ const reducer = expr.callee === 'Math.min' ? 'f64::min' : 'f64::max';
217
+ return `${arr}.iter().cloned().fold(${init}, ${reducer})`;
218
+ }
219
+ // computeSparkline → compute_sparkline, pass array by ref
220
+ if (expr.callee === 'computeSparkline') {
221
+ const args = expr.args.map(a => {
222
+ const e = exprToRust(a, ctx);
223
+ return a.kind === 'prop_access' ? `&${e}` : e;
224
+ }).join(', ');
225
+ return `compute_sparkline(${args})`;
226
+ }
227
+ const args = expr.args.map(a => exprToRust(a, ctx)).join(', ');
228
+ return `${toSnake(expr.callee)}(${args})`;
229
+ }
230
+ case 'method_call':
231
+ return methodCallToRust(expr.receiver, expr.method, expr.args, ctx);
232
+ case 'binary': {
233
+ if (expr.op === '||') {
234
+ // max - min || 1 → { let __or = max - min; if __or == 0.0 { 1.0 } else { __or } }
235
+ const lhs = exprToRust(expr.left, ctx);
236
+ const rhs = expr.right.kind === 'literal' && expr.right.value.kind === 'number'
237
+ ? `${expr.right.value.value}.0`
238
+ : exprToRust(expr.right, ctx);
239
+ return `{ let __or = ${lhs}; if __or == 0.0_f64 { ${rhs} } else { __or } }`;
240
+ }
241
+ if (expr.op === '/') {
242
+ const l = exprToRust(expr.left, ctx);
243
+ const r = exprToRust(expr.right, ctx);
244
+ const lc = needsF64Cast(expr.left, ctx) ? `(${l}) as f64` : l;
245
+ const rc = needsF64Cast(expr.right, ctx) ? `(${r}) as f64` : r;
246
+ return `(${lc} / ${rc})`;
247
+ }
248
+ {
249
+ const l = exprToRust(expr.left, ctx);
250
+ const r = exprToRust(expr.right, ctx);
251
+ // When in f64 context and neither operand is usize, promote integer literals
252
+ // so Rust doesn't complain about `f64 - {integer}`.
253
+ if (ctx.preferF64 && !needsF64Cast(expr.left, ctx) && !needsF64Cast(expr.right, ctx)) {
254
+ return `(${promoteF64Lit(expr.left, l)} ${expr.op} ${promoteF64Lit(expr.right, r)})`;
255
+ }
256
+ return `(${l} ${expr.op} ${r})`;
257
+ }
258
+ }
259
+ case 'eq': {
260
+ const l = exprToRust(expr.left, ctx);
261
+ // String equality: self.period == "today"
262
+ if (expr.right.kind === 'literal' && expr.right.value.kind === 'string') {
263
+ return `${l} == "${expr.right.value.value}"`;
264
+ }
265
+ return `${l} == ${exprToRust(expr.right, ctx)}`;
266
+ }
267
+ case 'ternary': {
268
+ const cond = exprToRust(expr.condition, ctx);
269
+ const then = exprToRust(expr.then, ctx);
270
+ const els = exprToRust(expr.else, ctx);
271
+ return `if ${cond} { ${then} } else { ${els} }`;
272
+ }
273
+ case 'arrow_fn':
274
+ return arrowFnToRust(expr.params, expr.body, ctx);
275
+ case 'template_str':
276
+ return templateStrToFormat(expr.parts, ctx);
277
+ case 'object_literal': {
278
+ const structName = ctx.returnType ?? 'Unknown';
279
+ const fields = expr.properties.map(p => ` ${toSnake(p.key)}: ${exprToRust(p.value, ctx)},`);
280
+ return `${structName} {\n${fields.join('\n')}\n }`;
281
+ }
282
+ case 'array_literal':
283
+ return `vec![${expr.elements.map(e => exprToRust(e, ctx)).join(', ')}]`;
284
+ case 'spread':
285
+ return exprToRust(expr.expr, ctx);
286
+ }
287
+ }
288
+ function litToRust(lit, _ctx) {
289
+ switch (lit.kind) {
290
+ case 'string': return JSON.stringify(lit.value);
291
+ case 'number': return String(lit.value);
292
+ case 'boolean': return String(lit.value);
293
+ case 'array': return `vec![${lit.elements.map(e => litToRust(e, _ctx)).join(', ')}]`;
294
+ case 'object': return `{ /* inline object */ }`;
295
+ }
296
+ }
297
+ // ── Index expressions (usize context) ─────────────────────────────────────────
298
+ function indexExprToRust(expr, ctx) {
299
+ // arr.length - N → arr.len() - N (stays in usize)
300
+ if (expr.kind === 'binary' &&
301
+ expr.op === '-' &&
302
+ expr.left.kind === 'prop_access' &&
303
+ expr.left.property === 'length') {
304
+ const obj = exprToRust(expr.left.object, ctx);
305
+ const rhs = expr.right.kind === 'literal' && expr.right.value.kind === 'number'
306
+ ? String(Math.floor(expr.right.value.value))
307
+ : `(${exprToRust(expr.right, ctx)}) as usize`;
308
+ return `${obj}.len() - ${rhs}`;
309
+ }
310
+ // Plain numeric index
311
+ if (expr.kind === 'literal' && expr.value.kind === 'number') {
312
+ return String(Math.floor(expr.value.value));
313
+ }
314
+ return exprToRust(expr, ctx);
315
+ }
316
+ // Promote an integer literal to f64 in float arithmetic context; leave others unchanged.
317
+ function promoteF64Lit(expr, rendered) {
318
+ if (expr.kind === 'literal' && expr.value.kind === 'number' && Number.isInteger(expr.value.value)) {
319
+ return `${expr.value.value}.0`;
320
+ }
321
+ return rendered;
322
+ }
323
+ // ── usize cast detection ───────────────────────────────────────────────────────
324
+ function needsF64Cast(expr, ctx) {
325
+ if (expr.kind === 'local_ref' && ctx.usizeVars.has(expr.name))
326
+ return true;
327
+ if (expr.kind === 'prop_access' && expr.property === 'length')
328
+ return true;
329
+ if (expr.kind === 'binary') {
330
+ return needsF64Cast(expr.left, ctx) || needsF64Cast(expr.right, ctx);
331
+ }
332
+ return false;
333
+ }
334
+ // ── Method calls ───────────────────────────────────────────────────────────────
335
+ function methodCallToRust(receiver, method, args, ctx) {
336
+ switch (method) {
337
+ case 'map': {
338
+ const fn_arg = args[0];
339
+ if (fn_arg?.kind !== 'arrow_fn')
340
+ break;
341
+ const params = fn_arg.params;
342
+ const recv = exprToRust(receiver, ctx);
343
+ // (value, index) enumerate pattern
344
+ if (params.length === 2 && !params[0].destructured) {
345
+ const [valParam, idxParam] = params;
346
+ const innerCtx = {
347
+ ...ctx,
348
+ usizeVars: new Set([...ctx.usizeVars, idxParam.name]),
349
+ };
350
+ const body = arrowBodyToRust(fn_arg.body, innerCtx);
351
+ return (`${recv}.iter().enumerate().map(|(${idxParam.name}, &${valParam.name})| {\n` +
352
+ ` ${body}\n }).collect::<Vec<_>>()`);
353
+ }
354
+ // ([x, y]) destructured pattern
355
+ if (params.length === 1 && params[0].destructured) {
356
+ const destr = params[0].destructured.join(', ');
357
+ const body = arrowBodyToRust(fn_arg.body, ctx);
358
+ return (`${recv}.iter().map(|&(${destr})| {\n` +
359
+ ` ${body}\n }).collect::<Vec<_>>()`);
360
+ }
361
+ // (x) single param
362
+ if (params.length === 1) {
363
+ const body = arrowBodyToRust(fn_arg.body, ctx);
364
+ return (`${recv}.iter().map(|${params[0].name}| {\n` +
365
+ ` ${body}\n }).collect::<Vec<_>>()`);
366
+ }
367
+ break;
368
+ }
369
+ case 'join': {
370
+ const sep = exprToRust(args[0], ctx);
371
+ const recv = exprToRust(receiver, ctx);
372
+ return `${recv}.join(${sep})`;
373
+ }
374
+ case 'toFixed': {
375
+ const recv = exprToRust(receiver, ctx);
376
+ const precArg = args[0];
377
+ if (precArg?.kind === 'literal' && precArg.value.kind === 'number') {
378
+ return `format!("{:.${Math.floor(precArg.value.value)}}", ${recv})`;
379
+ }
380
+ return `format!("{:.prec$}", ${recv}, prec = ${exprToRust(precArg, ctx)} as usize)`;
381
+ }
382
+ case 'toString':
383
+ case 'to_string':
384
+ return `${exprToRust(receiver, ctx)}.to_string()`;
385
+ }
386
+ const recv = exprToRust(receiver, ctx);
387
+ const a = args.map(x => exprToRust(x, ctx)).join(', ');
388
+ return `${recv}.${toSnake(method)}(${a})`;
389
+ }
390
+ // ── Arrow functions ────────────────────────────────────────────────────────────
391
+ function arrowFnToRust(params, body, ctx) {
392
+ const paramStr = params.map(p => {
393
+ if (p.destructured)
394
+ return `(${p.destructured.join(', ')})`;
395
+ return p.name;
396
+ }).join(', ');
397
+ const bodyStr = arrowBodyToRust(body, ctx);
398
+ return `|${paramStr}| { ${bodyStr} }`;
399
+ }
400
+ function arrowBodyToRust(body, ctx) {
401
+ if (Array.isArray(body)) {
402
+ return body.map(s => stmtToRust(s, ctx)).join('\n ');
403
+ }
404
+ return exprToRust(body, ctx);
405
+ }
406
+ // ── Template string → format!() ───────────────────────────────────────────────
407
+ function templateStrToFormat(parts, ctx) {
408
+ let fmt = '';
409
+ const named = [];
410
+ let argIdx = 0;
411
+ for (const part of parts) {
412
+ if (part.kind === 'static') {
413
+ fmt += escapeFormatStr(part.text);
414
+ }
415
+ else {
416
+ const argName = `t${argIdx++}`;
417
+ fmt += `{${argName}}`;
418
+ named.push(`${argName} = ${exprToRust(part.expr, ctx)}`);
419
+ }
420
+ }
421
+ if (named.length === 0)
422
+ return `"${fmt}".to_string()`;
423
+ return `format!("${fmt}", ${named.join(', ')})`;
424
+ }
425
+ // ── Render template → format!() ───────────────────────────────────────────────
426
+ function renderTemplateToFormatCall(bindings, nodes, ctx) {
427
+ const bindingStmts = bindings.map(b => {
428
+ const e = exprToRust(b.init, ctx);
429
+ return ` let ${b.name} = ${e};`;
430
+ });
431
+ let fmt = '';
432
+ const named = [];
433
+ const declaredNames = new Set();
434
+ let argIdx = 0;
435
+ for (const node of nodes) {
436
+ if (node.kind === 'static') {
437
+ fmt += escapeFormatStr(node.text);
438
+ }
439
+ else {
440
+ const argName = semanticArgName(node.expr, argIdx++);
441
+ fmt += `{${argName}}`;
442
+ if (!declaredNames.has(argName)) {
443
+ declaredNames.add(argName);
444
+ named.push(`${argName} = ${exprToRust(node.expr, ctx)}`);
445
+ }
446
+ }
447
+ }
448
+ const argsStr = named.length > 0
449
+ ? ',\n ' + named.join(',\n ')
450
+ : '';
451
+ const lines = [
452
+ ...bindingStmts,
453
+ ` format!(r##"${fmt}"##${argsStr})`,
454
+ ];
455
+ return lines.join('\n');
456
+ }
457
+ function semanticArgName(expr, fallback) {
458
+ switch (expr.kind) {
459
+ case 'local_ref':
460
+ return expr.name === '__styles__' ? 'styles' : toSnake(expr.name);
461
+ case 'self_field':
462
+ return toSnake(expr.field);
463
+ case 'prop_access': {
464
+ const obj = semanticArgName(expr.object, fallback);
465
+ return `${obj}_${toSnake(expr.property)}`;
466
+ }
467
+ case 'index': {
468
+ const obj = semanticArgName(expr.object, fallback);
469
+ if (expr.index.kind === 'literal' && expr.index.value.kind === 'number') {
470
+ return `${obj}_${expr.index.value.value}`;
471
+ }
472
+ return `${obj}_idx`;
473
+ }
474
+ case 'ternary': {
475
+ if (expr.condition.kind === 'eq' &&
476
+ expr.condition.right.kind === 'literal' &&
477
+ expr.condition.right.value.kind === 'string') {
478
+ return `tab_${expr.condition.right.value.value}`;
479
+ }
480
+ return `arg${fallback}`;
481
+ }
482
+ default:
483
+ return `arg${fallback}`;
484
+ }
485
+ }
486
+ // ── Component struct + render() ────────────────────────────────────────────────
487
+ function componentToRust(comp, ctx, stylesConst) {
488
+ const renderCtx = { ...ctx, stylesConst, usizeVars: new Set() };
489
+ const fields = comp.props.map(p => ` pub ${toSnake(p.name)}: ${irTypeToRust(p.type)},`);
490
+ const defaults = comp.props.map(p => ` ${toSnake(p.name)}: ${litToRust(p.defaultValue, ctx)}.to_string(),`);
491
+ const shadowBody = renderTemplateToFormatCall(comp.renderBindings, comp.renderTemplate, renderCtx);
492
+ // Build the outer <custom-element> wrapper format string.
493
+ // Prop names → data-kebab-case attributes; format arg uses snake_case variable names.
494
+ const attrFmt = comp.props.map(p => ` data-${toKebab(p.name)}="{${toSnake(p.name)}}"`).join('');
495
+ const attrArgs = comp.props.map(p => ` ${toSnake(p.name)} = self.${toSnake(p.name)}`).join(',\n');
496
+ const attrArgsStr = attrArgs ? `,\n${attrArgs}` : '';
497
+ const outerFmt = `<${comp.tagName}${attrFmt}>
498
+ <template shadowrootmode="open">
499
+ {shadow}
500
+ </template>
501
+ </${comp.tagName}>`;
502
+ return [
503
+ `pub struct ${comp.className} {`,
504
+ ...fields,
505
+ `}`,
506
+ ``,
507
+ `impl Default for ${comp.className} {`,
508
+ ` fn default() -> Self {`,
509
+ ` Self {`,
510
+ ...defaults,
511
+ ` }`,
512
+ ` }`,
513
+ `}`,
514
+ ``,
515
+ `impl ${comp.className} {`,
516
+ ` fn render_shadow(&self) -> String {`,
517
+ shadowBody,
518
+ ` }`,
519
+ ``,
520
+ ` pub fn render(&self) -> String {`,
521
+ ` let shadow = self.render_shadow();`,
522
+ ` format!(`,
523
+ ` r##"${outerFmt}"##${attrArgsStr},`,
524
+ ` shadow = shadow,`,
525
+ ` )`,
526
+ ` }`,
527
+ `}`,
528
+ ``,
529
+ ].join('\n');
530
+ }
531
+ function toKebab(s) {
532
+ return s
533
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
534
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
535
+ .toLowerCase();
536
+ }
537
+ // ── Types ──────────────────────────────────────────────────────────────────────
538
+ function irTypeToRust(t) {
539
+ switch (t.kind) {
540
+ case 'string': return 'String';
541
+ case 'number': return 'f64';
542
+ case 'boolean': return 'bool';
543
+ case 'void': return '()';
544
+ case 'array': return `Vec<${irTypeToRust(t.element)}>`;
545
+ case 'record': return `std::collections::HashMap<${irTypeToRust(t.key)}, ${irTypeToRust(t.value)}>`;
546
+ case 'tuple': {
547
+ const inner = t.elements.map(irTypeToRust);
548
+ const unique = [...new Set(inner)];
549
+ // Homogeneous tuple → Vec
550
+ if (unique.length === 1)
551
+ return `Vec<${unique[0]}>`;
552
+ return `(${inner.join(', ')})`;
553
+ }
554
+ case 'named': return t.name;
555
+ case 'object': return 'serde_json::Value';
556
+ case 'unknown': return 'String';
557
+ }
558
+ }
559
+ // ── Utilities ──────────────────────────────────────────────────────────────────
560
+ export function toSnake(s) {
561
+ return s
562
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
563
+ .replace(/([a-z])([A-Z])/g, '$1_$2')
564
+ .toLowerCase();
565
+ }
566
+ function toScreamingSnake(s) {
567
+ return toSnake(s).toUpperCase();
568
+ }
569
+ function capitalize(s) {
570
+ return s.charAt(0).toUpperCase() + s.slice(1);
571
+ }
572
+ function rustRawStr(s) {
573
+ return `r##"${s}"##`;
574
+ }
575
+ function escapeFormatStr(s) {
576
+ return s.replace(/\{/g, '{{').replace(/\}/g, '}}');
577
+ }
578
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/codegen/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}