MCPcopy
hub / github.com/thesysdev/openui / serializeElementExpr

Function serializeElementExpr

packages/lang-core/src/parser/serialize.ts:180–213  ·  view source on GitHub ↗
(
  node: ElementNode,
  paramMap: ParamMap,
  collector: StatementCollector,
)

Source from the content-addressed store, hash-verified

178// ─── ElementNode → expression string ─────────────────────────────────────────
179
180function serializeElementExpr(
181 node: ElementNode,
182 paramMap: ParamMap,
183 collector: StatementCollector,
184): string {
185 const def = paramMap.get(node.typeName);
186
187 if (def) {
188 // Map named props back to positional args using ParamMap order
189 const args: string[] = [];
190 for (const param of def.params) {
191 const val = node.props[param.name];
192 args.push(serializeValue(val, paramMap, collector));
193 }
194
195 // Trim trailing null/undefined/default args
196 while (args.length > 0) {
197 const last = args[args.length - 1];
198 if (last !== "null") break;
199 const paramIdx = args.length - 1;
200 const param = def.params[paramIdx];
201 if (!param) break;
202 // Only trim if the param is optional or has a default matching null
203 if (param.required) break;
204 args.pop();
205 }
206
207 return `${node.typeName}(${args.join(", ")})`;
208 }
209
210 // Unknown component — fallback to Object.keys() order
211 const fallbackArgs = Object.values(node.props).map((v) => serializeValue(v, paramMap, collector));
212 return `${node.typeName}(${fallbackArgs.join(", ")})`;
213}
214
215// ─── State declaration serializer ────────────────────────────────────────────
216

Callers 2

serializeElementValueFunction · 0.85
jsonToOpenUIFunction · 0.85

Calls 3

serializeValueFunction · 0.85
pushMethod · 0.80
getMethod · 0.65

Tested by

no test coverage detected