@barefootjs/go-template 0.30.3 → 0.30.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"go-template-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/go-template-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"go-template-adapter.d.ts","sourceRoot":"","sources":["../../src/adapter/go-template-adapter.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ import {
31
31
  isSupported,
32
32
  exprToString,
33
33
  identifierPath,
34
- asCallbackMethodCall as asCallbackMethodCall3,
34
+ asCallbackMethodCall as asCallbackMethodCall4,
35
35
  sortComparatorFromArrow,
36
36
  emitParsedExpr,
37
37
  emitIRNode,
@@ -971,6 +971,14 @@ function renderLoweringNode(ctx, node) {
971
971
  return `${helper} ${parts.join(" ")}`;
972
972
  }
973
973
 
974
+ // src/adapter/value/value-lowering.ts
975
+ import {
976
+ asCallbackMethodCall,
977
+ freeVarsInBody as freeVarsInBody2,
978
+ materializeGetterCalls,
979
+ serializeParsedExpr as serializeParsedExpr2
980
+ } from "@barefootjs/jsx";
981
+
974
982
  // src/adapter/type/type-codegen.ts
975
983
  function collapseLiteralUnion(typeInfo) {
976
984
  if (typeInfo.kind !== "union" || !typeInfo.unionTypes || typeInfo.unionTypes.length === 0) {
@@ -1191,6 +1199,14 @@ function convertInitialValue(ctx, value, _typeInfo, propsParams, preParsed) {
1191
1199
  if (value.startsWith('"') && value.endsWith('"')) {
1192
1200
  return value;
1193
1201
  }
1202
+ if (preParsed) {
1203
+ const chain = matchMapJoinChain(preParsed);
1204
+ if (chain) {
1205
+ const chainGo = mapJoinChainToGo(ctx, chain, [], propsParams ?? [], EMPTY_PROP_FALLBACK_VARS);
1206
+ if (chainGo !== null)
1207
+ return chainGo;
1208
+ }
1209
+ }
1194
1210
  return '""';
1195
1211
  }
1196
1212
  }
@@ -1267,13 +1283,84 @@ function getSignalInitialValueAsGo(ctx, initialValue, propsParams, propFallbackV
1267
1283
  }
1268
1284
  return "0";
1269
1285
  }
1286
+ function matchMapJoinChain(expr) {
1287
+ if (expr.kind !== "array-method" || expr.method !== "join")
1288
+ return null;
1289
+ const mapCb = asCallbackMethodCall(expr.object);
1290
+ if (!mapCb || mapCb.method !== "map")
1291
+ return null;
1292
+ return { object: mapCb.object, arrow: mapCb.arrow, sepArg: expr.args[0] };
1293
+ }
1294
+ function resolveMapJoinBaseAsGo(ctx, object, signals, propsParams) {
1295
+ if (object.kind === "call" && object.callee.kind === "identifier" && object.args.length === 0) {
1296
+ const calleeName = object.callee.name;
1297
+ const sig = signals.find((s) => s.getter === calleeName);
1298
+ if (sig) {
1299
+ const bakeType = ctx.state.synthStructTypes.get(sig.getter) ?? sig.type ?? { kind: "array", raw: "unknown[]" };
1300
+ return convertInitialValue(ctx, sig.initialValue, bakeType, propsParams, sig.parsed);
1301
+ }
1302
+ }
1303
+ const propName = object.kind === "member" && !object.computed && object.object.kind === "identifier" && object.object.name === "props" ? object.property : object.kind === "identifier" ? object.name : null;
1304
+ if (propName && propsParams.some((p) => p.name === propName)) {
1305
+ return `in.${capitalizeFieldName(propName)}`;
1306
+ }
1307
+ if (object.kind === "array-literal") {
1308
+ if (object.elements.length === 0)
1309
+ return "[]interface{}{}";
1310
+ const elems = [];
1311
+ for (const el of object.elements) {
1312
+ const go = el.kind === "object-literal" ? objectLiteralToGoMap(ctx, el) : parsedLiteralToGo(ctx, el);
1313
+ if (go === null)
1314
+ return null;
1315
+ elems.push(go);
1316
+ }
1317
+ return `[]interface{}{${elems.join(", ")}}`;
1318
+ }
1319
+ return null;
1320
+ }
1321
+ function mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars) {
1322
+ const itemsGo = resolveMapJoinBaseAsGo(ctx, chain.object, signals, propsParams);
1323
+ if (itemsGo === null)
1324
+ return null;
1325
+ const knownGetterNames = new Set(signals.map((s) => s.getter));
1326
+ const materialized = materializeGetterCalls(chain.arrow.body, knownGetterNames);
1327
+ const projJSON = serializeParsedExpr2(materialized);
1328
+ if (projJSON === null)
1329
+ return null;
1330
+ const paramName = chain.arrow.params[0] ?? "_";
1331
+ const freeVars = freeVarsInBody2(materialized, new Set(chain.arrow.params));
1332
+ const envEntries = [];
1333
+ for (const name of freeVars) {
1334
+ const sig = signals.find((s) => s.getter === name);
1335
+ let goExpr = null;
1336
+ if (sig) {
1337
+ goExpr = getSignalInitialValueAsGo(ctx, sig.initialValue, propsParams, propFallbackVars, sig.type);
1338
+ } else if (propsParams.some((p) => p.name === name)) {
1339
+ const hoisted = propFallbackVars.get(name);
1340
+ goExpr = hoisted ? hoisted.varName : `in.${capitalizeFieldName(name)}`;
1341
+ }
1342
+ if (goExpr === null)
1343
+ return null;
1344
+ envEntries.push(`${JSON.stringify(name)}: ${goExpr}`);
1345
+ }
1346
+ const envMap = `map[string]any{${envEntries.join(", ")}}`;
1347
+ let sepGo;
1348
+ if (!chain.sepArg) {
1349
+ sepGo = JSON.stringify(",");
1350
+ } else if (chain.sepArg.kind === "literal" && chain.sepArg.literalType === "string") {
1351
+ sepGo = JSON.stringify(chain.sepArg.value);
1352
+ } else {
1353
+ return null;
1354
+ }
1355
+ return `bf.Join(bf.MapEval(${itemsGo}, "${escapeGoString(projJSON)}", ${JSON.stringify(paramName)}, ${envMap}), ${sepGo})`;
1356
+ }
1270
1357
 
1271
1358
  // src/adapter/memo/memo-type.ts
1272
- import { asCallbackMethodCall } from "@barefootjs/jsx";
1359
+ import { asCallbackMethodCall as asCallbackMethodCall2 } from "@barefootjs/jsx";
1273
1360
  function isListFilterMemo(memo) {
1274
1361
  if (!memo.parsed)
1275
1362
  return false;
1276
- const cb = asCallbackMethodCall(memo.parsed);
1363
+ const cb = asCallbackMethodCall2(memo.parsed);
1277
1364
  return cb !== null && cb.method === "filter";
1278
1365
  }
1279
1366
  function isBooleanMemo(ctx, memo, signals, propsParamMap) {
@@ -1572,10 +1659,10 @@ function computeObjectMemoInitialValue(ctx, memo) {
1572
1659
 
1573
1660
  // src/adapter/memo/memo-compute.ts
1574
1661
  import {
1575
- asCallbackMethodCall as asCallbackMethodCall2,
1576
- freeVarsInBody as freeVarsInBody2,
1577
- materializeGetterCalls,
1578
- serializeParsedExpr as serializeParsedExpr2
1662
+ asCallbackMethodCall as asCallbackMethodCall3,
1663
+ freeVarsInBody as freeVarsInBody3,
1664
+ materializeGetterCalls as materializeGetterCalls2,
1665
+ serializeParsedExpr as serializeParsedExpr3
1579
1666
  } from "@barefootjs/jsx";
1580
1667
 
1581
1668
  // src/adapter/memo/template-interp.ts
@@ -1750,7 +1837,7 @@ function propNameForPropsBinding(ctx, e) {
1750
1837
  return null;
1751
1838
  }
1752
1839
  function matchFilterArmMemo(ctx, body, signals, propsParams) {
1753
- const cb = asCallbackMethodCall2(body);
1840
+ const cb = asCallbackMethodCall3(body);
1754
1841
  if (!cb || cb.method !== "filter")
1755
1842
  return null;
1756
1843
  const propName = propsMemberName(cb.object);
@@ -1758,12 +1845,12 @@ function matchFilterArmMemo(ctx, body, signals, propsParams) {
1758
1845
  if (!propName || !param)
1759
1846
  return null;
1760
1847
  const knownGetterNames = new Set(ctx.state.ssrSeedPlan.steps.filter((s) => s.kind !== "env-reader").map((s) => s.name));
1761
- const materialized = materializeGetterCalls(cb.arrow.body, knownGetterNames);
1762
- const predJSON = serializeParsedExpr2(materialized);
1848
+ const materialized = materializeGetterCalls2(cb.arrow.body, knownGetterNames);
1849
+ const predJSON = serializeParsedExpr3(materialized);
1763
1850
  if (predJSON === null)
1764
1851
  return null;
1765
1852
  const paramName = cb.arrow.params[0] ?? "_";
1766
- const freeVars = freeVarsInBody2(materialized, new Set(cb.arrow.params));
1853
+ const freeVars = freeVarsInBody3(materialized, new Set(cb.arrow.params));
1767
1854
  return { propName, predJSON, paramName, freeVars };
1768
1855
  }
1769
1856
  function filterArmEarlierSiblingRefs(ctx, memo, signals, propsParams) {
@@ -2005,6 +2092,30 @@ function memoInitialFromParsedBody(ctx, body, signals, propsParams, propFallback
2005
2092
  if (param)
2006
2093
  return `in.${capitalizeFieldName(body.name)}`;
2007
2094
  }
2095
+ if (body.kind === "binary" && body.op === "+") {
2096
+ const concatGo = resolveStringConcatChainGo(ctx, body, signals, propsParams, propFallbackVars, propRef);
2097
+ if (concatGo !== null)
2098
+ return concatGo;
2099
+ }
2100
+ return null;
2101
+ }
2102
+ function resolveStringConcatChainGo(ctx, expr, signals, propsParams, propFallbackVars, propRef) {
2103
+ if (expr.kind === "binary" && expr.op === "+") {
2104
+ const l = resolveStringConcatChainGo(ctx, expr.left, signals, propsParams, propFallbackVars, propRef);
2105
+ const r = resolveStringConcatChainGo(ctx, expr.right, signals, propsParams, propFallbackVars, propRef);
2106
+ return l !== null && r !== null ? `${l} + ${r}` : null;
2107
+ }
2108
+ if (expr.kind === "literal" && expr.literalType === "string") {
2109
+ return JSON.stringify(expr.value);
2110
+ }
2111
+ const propName = propsMemberName(expr) ?? (expr.kind === "identifier" ? expr.name : null);
2112
+ if (propName && propsParams.some((p) => p.name === propName)) {
2113
+ return propRef(propName);
2114
+ }
2115
+ const chain = matchMapJoinChain(expr);
2116
+ if (chain) {
2117
+ return mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars);
2118
+ }
2008
2119
  return null;
2009
2120
  }
2010
2121
  function computeMemoInitialValueOrNull(ctx, memo, signals, propsParams, propFallbackVars = EMPTY_PROP_FALLBACK_VARS2, resolving = new Set) {
@@ -4831,7 +4942,7 @@ ${goFields.join(`
4831
4942
  return `${obj}.${goFieldNameForKey(property)}`;
4832
4943
  }
4833
4944
  indexAccess(object, index, emit) {
4834
- return `index ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
4945
+ return `bf_get ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
4835
4946
  }
4836
4947
  binary(op, left, right, emit) {
4837
4948
  const l = emit(left);
@@ -4963,7 +5074,7 @@ ${goFields.join(`
4963
5074
  "some"
4964
5075
  ]);
4965
5076
  higherOrderShapeOf(node) {
4966
- const cb = asCallbackMethodCall3(node);
5077
+ const cb = asCallbackMethodCall4(node);
4967
5078
  if (!cb)
4968
5079
  return null;
4969
5080
  if (!GoTemplateAdapter.PREDICATE_METHODS.has(cb.method))
@@ -5411,7 +5522,7 @@ ${goFields.join(`
5411
5522
  if (expr.callee.kind === "identifier" && expr.args.length === 0) {
5412
5523
  return `$.${capitalizeFieldName(expr.callee.name)}`;
5413
5524
  }
5414
- if (asCallbackMethodCall3(expr) !== null) {
5525
+ if (asCallbackMethodCall4(expr) !== null) {
5415
5526
  return this.refuseFilterExprNode(expr);
5416
5527
  }
5417
5528
  const result = this.renderFilterExpr(expr.callee, param, localVarMap, datumField);
@@ -5830,7 +5941,7 @@ ${goFields.join(`
5830
5941
  });
5831
5942
  return plain("false");
5832
5943
  }
5833
- if (asCallbackMethodCall3(expr)) {
5944
+ if (asCallbackMethodCall4(expr)) {
5834
5945
  const rendered = this.renderParsedExpr(expr);
5835
5946
  const split = this.splitPreamble(rendered);
5836
5947
  if (split)
@@ -6332,7 +6443,7 @@ ${children}`;
6332
6443
  const trimmed = value.expr.trim();
6333
6444
  const currentLoopParam = this.loopParamStack[this.loopParamStack.length - 1];
6334
6445
  if (currentLoopParam && trimmed === currentLoopParam) {
6335
- return `{{bf_spread_attrs .}}`;
6446
+ return `{{bf_spread_attrs (bf_js_keys .)}}`;
6336
6447
  }
6337
6448
  const restInfo = this.lookupRestExclude(trimmed);
6338
6449
  if (restInfo) {
@@ -6341,7 +6452,7 @@ ${children}`;
6341
6452
  return `{{bf_spread_attrs (bf_omit ${omitArgs})}}`;
6342
6453
  }
6343
6454
  const goExpr = this.convertExpressionToGo(value.expr);
6344
- return `{{bf_spread_attrs ${goExpr}}}`;
6455
+ return `{{bf_spread_attrs (bf_js_keys ${wrapIfMultiToken(goExpr)})}}`;
6345
6456
  }
6346
6457
  return `{{bf_spread_attrs .${value.slotId}}}`;
6347
6458
  },
@@ -1 +1 @@
1
- {"version":3,"file":"memo-compute.d.ts","sourceRoot":"","sources":["../../../src/adapter/memo/memo-compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAQ5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AA2EtD;;;;;;;mBAOmB;AACnB,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACtE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAsBtF;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,EAC3C,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GACtE,MAAM,EAAE,CAgBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,EAChF,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAA4B,EACjF,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAwBR;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EACtD,eAAe,EAAE,MAAM,EACvB,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,MAAM,GAAG,IAAI,CAiWf;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,EAChJ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAA4B;AACjF;;;;;;;GAOG;AACH,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,MAAM,GAAG,IAAI,CAyDf;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EACtD,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,MAAM,GAAG,IAAI,CA0Bf;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EACtD,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,MAAM,GAAG,IAAI,CAwCf;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,EAAE,EACpE,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACvE,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,EACtD,SAAS,GAAE,WAAW,CAAC,MAAM,CAAa,GACzC,MAAM,GAAG,IAAI,CAiBf;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,UAAU,EAChB,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,GAAG,CAAC,MAAM,CAAC,CAoFb"}
1
+ {"version":3,"file":"memo-compute.d.ts","sourceRoot":"","sources":["../../../src/adapter/memo/memo-compute.ts"],"names":[],"mappings":"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"}
@@ -51,4 +51,54 @@ export declare function objectLiteralToGoMap(ctx: GoEmitContext, expr: ParsedExp
51
51
  export declare function getSignalInitialValueAsGo(ctx: GoEmitContext, initialValue: string, propsParams: {
52
52
  name: string;
53
53
  }[], propFallbackVars?: ReadonlyMap<string, PropFallbackVar>, signalType?: TypeInfo): string;
54
+ /**
55
+ * A value-producing `.map(cb).join(sep)` chain — `<object>.map((param) =>
56
+ * <body>).join(<sepExpr>)` — the constructor-Go-source analogue of the
57
+ * template-position `bf_join (bf_map_eval …)` lowering (`emitMapEval`,
58
+ * `go-emit.ts`). `.join(...)` folds to the `array-method` IR node at parse
59
+ * time (`expression-parser.ts`); its `object` is recognised as a `.map(cb)`
60
+ * callback call via `asCallbackMethodCall` (the same recognition
61
+ * `matchFilterArmMemo`, `memo-compute.ts`, uses for `.filter`). Returns the
62
+ * receiver array, the mapper arrow, and the join separator argument (absent
63
+ * when `.join()` was called with no argument — JS defaults to `,`), or null
64
+ * when `expr` isn't this shape.
65
+ */
66
+ export declare function matchMapJoinChain(expr: ParsedExpr): {
67
+ object: ParsedExpr;
68
+ arrow: Extract<ParsedExpr, {
69
+ kind: 'arrow';
70
+ }>;
71
+ sepArg?: ParsedExpr;
72
+ } | null;
73
+ /**
74
+ * Lower a `.map(cb).join(sep)` chain (matched by {@link matchMapJoinChain})
75
+ * to a `bf.Join(bf.MapEval(<items>, "<projJSON>", "<param>", <envMap>),
76
+ * <sep>)` Go expression — the constructor-source analogue of
77
+ * `matchFilterArmMemo`'s `bf.FilterEval` emit (`memo-compute.ts`), reusing
78
+ * the SAME two runtime evaluator functions (`MapEval`, `eval.go`; `Join`,
79
+ * `bf.go`) the template-position `bf_map_eval`/`bf_join` lowering already
80
+ * calls. Shared by a memo's derived value (`memoInitialFromParsedBody`'s
81
+ * concatenation-chain arm) and a SIGNAL's own initializer
82
+ * (`convertInitialValue`'s `string` branch, #2492).
83
+ *
84
+ * @returns the Go expression, or null when the receiver doesn't resolve
85
+ * ({@link resolveMapJoinBaseAsGo}), the projection body isn't
86
+ * representable to the runtime evaluator (`serializeParsedExpr` refusal),
87
+ * a captured free variable doesn't resolve, or the separator isn't a
88
+ * string literal (a dynamic separator — out of scope for this arm).
89
+ */
90
+ export declare function mapJoinChainToGo(ctx: GoEmitContext, chain: {
91
+ object: ParsedExpr;
92
+ arrow: Extract<ParsedExpr, {
93
+ kind: 'arrow';
94
+ }>;
95
+ sepArg?: ParsedExpr;
96
+ }, signals: {
97
+ getter: string;
98
+ initialValue: string;
99
+ type?: TypeInfo;
100
+ parsed?: ParsedExpr;
101
+ }[], propsParams: {
102
+ name: string;
103
+ }[], propFallbackVars: ReadonlyMap<string, PropFallbackVar>): string | null;
54
104
  //# sourceMappingURL=value-lowering.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value-lowering.d.ts","sourceRoot":"","sources":["../../../src/adapter/value/value-lowering.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AA+CtD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,QAAQ,EACnB,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAChC,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,CA+ER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAWxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/B,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAA4B,EACjF,UAAU,CAAC,EAAE,QAAQ,GACpB,MAAM,CAiCR"}
1
+ {"version":3,"file":"value-lowering.d.ts","sourceRoot":"","sources":["../../../src/adapter/value/value-lowering.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAQ3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAgDtD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,QAAQ,EACnB,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAChC,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,CA6FR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAWxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/B,gBAAgB,GAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAA4B,EACjF,UAAU,CAAC,EAAE,QAAQ,GACpB,MAAM,CAiCR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG;IACnD,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,GAAG,IAAI,CAKP;AAqED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,EACjG,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,EAAE,EACzF,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC/B,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GACrD,MAAM,GAAG,IAAI,CAoCf"}
package/dist/build.js CHANGED
@@ -371,7 +371,7 @@ import {
371
371
  isSupported,
372
372
  exprToString,
373
373
  identifierPath,
374
- asCallbackMethodCall as asCallbackMethodCall3,
374
+ asCallbackMethodCall as asCallbackMethodCall4,
375
375
  sortComparatorFromArrow,
376
376
  emitParsedExpr,
377
377
  emitIRNode,
@@ -1311,6 +1311,14 @@ function renderLoweringNode(ctx, node) {
1311
1311
  return `${helper} ${parts.join(" ")}`;
1312
1312
  }
1313
1313
 
1314
+ // src/adapter/value/value-lowering.ts
1315
+ import {
1316
+ asCallbackMethodCall,
1317
+ freeVarsInBody as freeVarsInBody2,
1318
+ materializeGetterCalls,
1319
+ serializeParsedExpr as serializeParsedExpr2
1320
+ } from "@barefootjs/jsx";
1321
+
1314
1322
  // src/adapter/type/type-codegen.ts
1315
1323
  function collapseLiteralUnion(typeInfo) {
1316
1324
  if (typeInfo.kind !== "union" || !typeInfo.unionTypes || typeInfo.unionTypes.length === 0) {
@@ -1531,6 +1539,14 @@ function convertInitialValue(ctx, value, _typeInfo, propsParams, preParsed) {
1531
1539
  if (value.startsWith('"') && value.endsWith('"')) {
1532
1540
  return value;
1533
1541
  }
1542
+ if (preParsed) {
1543
+ const chain = matchMapJoinChain(preParsed);
1544
+ if (chain) {
1545
+ const chainGo = mapJoinChainToGo(ctx, chain, [], propsParams ?? [], EMPTY_PROP_FALLBACK_VARS);
1546
+ if (chainGo !== null)
1547
+ return chainGo;
1548
+ }
1549
+ }
1534
1550
  return '""';
1535
1551
  }
1536
1552
  }
@@ -1607,13 +1623,84 @@ function getSignalInitialValueAsGo(ctx, initialValue, propsParams, propFallbackV
1607
1623
  }
1608
1624
  return "0";
1609
1625
  }
1626
+ function matchMapJoinChain(expr) {
1627
+ if (expr.kind !== "array-method" || expr.method !== "join")
1628
+ return null;
1629
+ const mapCb = asCallbackMethodCall(expr.object);
1630
+ if (!mapCb || mapCb.method !== "map")
1631
+ return null;
1632
+ return { object: mapCb.object, arrow: mapCb.arrow, sepArg: expr.args[0] };
1633
+ }
1634
+ function resolveMapJoinBaseAsGo(ctx, object, signals, propsParams) {
1635
+ if (object.kind === "call" && object.callee.kind === "identifier" && object.args.length === 0) {
1636
+ const calleeName = object.callee.name;
1637
+ const sig = signals.find((s) => s.getter === calleeName);
1638
+ if (sig) {
1639
+ const bakeType = ctx.state.synthStructTypes.get(sig.getter) ?? sig.type ?? { kind: "array", raw: "unknown[]" };
1640
+ return convertInitialValue(ctx, sig.initialValue, bakeType, propsParams, sig.parsed);
1641
+ }
1642
+ }
1643
+ const propName = object.kind === "member" && !object.computed && object.object.kind === "identifier" && object.object.name === "props" ? object.property : object.kind === "identifier" ? object.name : null;
1644
+ if (propName && propsParams.some((p) => p.name === propName)) {
1645
+ return `in.${capitalizeFieldName(propName)}`;
1646
+ }
1647
+ if (object.kind === "array-literal") {
1648
+ if (object.elements.length === 0)
1649
+ return "[]interface{}{}";
1650
+ const elems = [];
1651
+ for (const el of object.elements) {
1652
+ const go = el.kind === "object-literal" ? objectLiteralToGoMap(ctx, el) : parsedLiteralToGo(ctx, el);
1653
+ if (go === null)
1654
+ return null;
1655
+ elems.push(go);
1656
+ }
1657
+ return `[]interface{}{${elems.join(", ")}}`;
1658
+ }
1659
+ return null;
1660
+ }
1661
+ function mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars) {
1662
+ const itemsGo = resolveMapJoinBaseAsGo(ctx, chain.object, signals, propsParams);
1663
+ if (itemsGo === null)
1664
+ return null;
1665
+ const knownGetterNames = new Set(signals.map((s) => s.getter));
1666
+ const materialized = materializeGetterCalls(chain.arrow.body, knownGetterNames);
1667
+ const projJSON = serializeParsedExpr2(materialized);
1668
+ if (projJSON === null)
1669
+ return null;
1670
+ const paramName = chain.arrow.params[0] ?? "_";
1671
+ const freeVars = freeVarsInBody2(materialized, new Set(chain.arrow.params));
1672
+ const envEntries = [];
1673
+ for (const name of freeVars) {
1674
+ const sig = signals.find((s) => s.getter === name);
1675
+ let goExpr = null;
1676
+ if (sig) {
1677
+ goExpr = getSignalInitialValueAsGo(ctx, sig.initialValue, propsParams, propFallbackVars, sig.type);
1678
+ } else if (propsParams.some((p) => p.name === name)) {
1679
+ const hoisted = propFallbackVars.get(name);
1680
+ goExpr = hoisted ? hoisted.varName : `in.${capitalizeFieldName(name)}`;
1681
+ }
1682
+ if (goExpr === null)
1683
+ return null;
1684
+ envEntries.push(`${JSON.stringify(name)}: ${goExpr}`);
1685
+ }
1686
+ const envMap = `map[string]any{${envEntries.join(", ")}}`;
1687
+ let sepGo;
1688
+ if (!chain.sepArg) {
1689
+ sepGo = JSON.stringify(",");
1690
+ } else if (chain.sepArg.kind === "literal" && chain.sepArg.literalType === "string") {
1691
+ sepGo = JSON.stringify(chain.sepArg.value);
1692
+ } else {
1693
+ return null;
1694
+ }
1695
+ return `bf.Join(bf.MapEval(${itemsGo}, "${escapeGoString(projJSON)}", ${JSON.stringify(paramName)}, ${envMap}), ${sepGo})`;
1696
+ }
1610
1697
 
1611
1698
  // src/adapter/memo/memo-type.ts
1612
- import { asCallbackMethodCall } from "@barefootjs/jsx";
1699
+ import { asCallbackMethodCall as asCallbackMethodCall2 } from "@barefootjs/jsx";
1613
1700
  function isListFilterMemo(memo) {
1614
1701
  if (!memo.parsed)
1615
1702
  return false;
1616
- const cb = asCallbackMethodCall(memo.parsed);
1703
+ const cb = asCallbackMethodCall2(memo.parsed);
1617
1704
  return cb !== null && cb.method === "filter";
1618
1705
  }
1619
1706
  function isBooleanMemo(ctx, memo, signals, propsParamMap) {
@@ -1912,10 +1999,10 @@ function computeObjectMemoInitialValue(ctx, memo) {
1912
1999
 
1913
2000
  // src/adapter/memo/memo-compute.ts
1914
2001
  import {
1915
- asCallbackMethodCall as asCallbackMethodCall2,
1916
- freeVarsInBody as freeVarsInBody2,
1917
- materializeGetterCalls,
1918
- serializeParsedExpr as serializeParsedExpr2
2002
+ asCallbackMethodCall as asCallbackMethodCall3,
2003
+ freeVarsInBody as freeVarsInBody3,
2004
+ materializeGetterCalls as materializeGetterCalls2,
2005
+ serializeParsedExpr as serializeParsedExpr3
1919
2006
  } from "@barefootjs/jsx";
1920
2007
 
1921
2008
  // src/adapter/memo/template-interp.ts
@@ -2090,7 +2177,7 @@ function propNameForPropsBinding(ctx, e) {
2090
2177
  return null;
2091
2178
  }
2092
2179
  function matchFilterArmMemo(ctx, body, signals, propsParams) {
2093
- const cb = asCallbackMethodCall2(body);
2180
+ const cb = asCallbackMethodCall3(body);
2094
2181
  if (!cb || cb.method !== "filter")
2095
2182
  return null;
2096
2183
  const propName = propsMemberName(cb.object);
@@ -2098,12 +2185,12 @@ function matchFilterArmMemo(ctx, body, signals, propsParams) {
2098
2185
  if (!propName || !param)
2099
2186
  return null;
2100
2187
  const knownGetterNames = new Set(ctx.state.ssrSeedPlan.steps.filter((s) => s.kind !== "env-reader").map((s) => s.name));
2101
- const materialized = materializeGetterCalls(cb.arrow.body, knownGetterNames);
2102
- const predJSON = serializeParsedExpr2(materialized);
2188
+ const materialized = materializeGetterCalls2(cb.arrow.body, knownGetterNames);
2189
+ const predJSON = serializeParsedExpr3(materialized);
2103
2190
  if (predJSON === null)
2104
2191
  return null;
2105
2192
  const paramName = cb.arrow.params[0] ?? "_";
2106
- const freeVars = freeVarsInBody2(materialized, new Set(cb.arrow.params));
2193
+ const freeVars = freeVarsInBody3(materialized, new Set(cb.arrow.params));
2107
2194
  return { propName, predJSON, paramName, freeVars };
2108
2195
  }
2109
2196
  function filterArmEarlierSiblingRefs(ctx, memo, signals, propsParams) {
@@ -2345,6 +2432,30 @@ function memoInitialFromParsedBody(ctx, body, signals, propsParams, propFallback
2345
2432
  if (param)
2346
2433
  return `in.${capitalizeFieldName(body.name)}`;
2347
2434
  }
2435
+ if (body.kind === "binary" && body.op === "+") {
2436
+ const concatGo = resolveStringConcatChainGo(ctx, body, signals, propsParams, propFallbackVars, propRef);
2437
+ if (concatGo !== null)
2438
+ return concatGo;
2439
+ }
2440
+ return null;
2441
+ }
2442
+ function resolveStringConcatChainGo(ctx, expr, signals, propsParams, propFallbackVars, propRef) {
2443
+ if (expr.kind === "binary" && expr.op === "+") {
2444
+ const l = resolveStringConcatChainGo(ctx, expr.left, signals, propsParams, propFallbackVars, propRef);
2445
+ const r = resolveStringConcatChainGo(ctx, expr.right, signals, propsParams, propFallbackVars, propRef);
2446
+ return l !== null && r !== null ? `${l} + ${r}` : null;
2447
+ }
2448
+ if (expr.kind === "literal" && expr.literalType === "string") {
2449
+ return JSON.stringify(expr.value);
2450
+ }
2451
+ const propName = propsMemberName(expr) ?? (expr.kind === "identifier" ? expr.name : null);
2452
+ if (propName && propsParams.some((p) => p.name === propName)) {
2453
+ return propRef(propName);
2454
+ }
2455
+ const chain = matchMapJoinChain(expr);
2456
+ if (chain) {
2457
+ return mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars);
2458
+ }
2348
2459
  return null;
2349
2460
  }
2350
2461
  function computeMemoInitialValueOrNull(ctx, memo, signals, propsParams, propFallbackVars = EMPTY_PROP_FALLBACK_VARS2, resolving = new Set) {
@@ -5171,7 +5282,7 @@ ${goFields.join(`
5171
5282
  return `${obj}.${goFieldNameForKey(property)}`;
5172
5283
  }
5173
5284
  indexAccess(object, index, emit) {
5174
- return `index ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
5285
+ return `bf_get ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
5175
5286
  }
5176
5287
  binary(op, left, right, emit) {
5177
5288
  const l = emit(left);
@@ -5303,7 +5414,7 @@ ${goFields.join(`
5303
5414
  "some"
5304
5415
  ]);
5305
5416
  higherOrderShapeOf(node) {
5306
- const cb = asCallbackMethodCall3(node);
5417
+ const cb = asCallbackMethodCall4(node);
5307
5418
  if (!cb)
5308
5419
  return null;
5309
5420
  if (!GoTemplateAdapter.PREDICATE_METHODS.has(cb.method))
@@ -5751,7 +5862,7 @@ ${goFields.join(`
5751
5862
  if (expr.callee.kind === "identifier" && expr.args.length === 0) {
5752
5863
  return `$.${capitalizeFieldName(expr.callee.name)}`;
5753
5864
  }
5754
- if (asCallbackMethodCall3(expr) !== null) {
5865
+ if (asCallbackMethodCall4(expr) !== null) {
5755
5866
  return this.refuseFilterExprNode(expr);
5756
5867
  }
5757
5868
  const result = this.renderFilterExpr(expr.callee, param, localVarMap, datumField);
@@ -6170,7 +6281,7 @@ ${goFields.join(`
6170
6281
  });
6171
6282
  return plain("false");
6172
6283
  }
6173
- if (asCallbackMethodCall3(expr)) {
6284
+ if (asCallbackMethodCall4(expr)) {
6174
6285
  const rendered = this.renderParsedExpr(expr);
6175
6286
  const split = this.splitPreamble(rendered);
6176
6287
  if (split)
@@ -6672,7 +6783,7 @@ ${children}`;
6672
6783
  const trimmed = value.expr.trim();
6673
6784
  const currentLoopParam = this.loopParamStack[this.loopParamStack.length - 1];
6674
6785
  if (currentLoopParam && trimmed === currentLoopParam) {
6675
- return `{{bf_spread_attrs .}}`;
6786
+ return `{{bf_spread_attrs (bf_js_keys .)}}`;
6676
6787
  }
6677
6788
  const restInfo = this.lookupRestExclude(trimmed);
6678
6789
  if (restInfo) {
@@ -6681,7 +6792,7 @@ ${children}`;
6681
6792
  return `{{bf_spread_attrs (bf_omit ${omitArgs})}}`;
6682
6793
  }
6683
6794
  const goExpr = this.convertExpressionToGo(value.expr);
6684
- return `{{bf_spread_attrs ${goExpr}}}`;
6795
+ return `{{bf_spread_attrs (bf_js_keys ${wrapIfMultiToken(goExpr)})}}`;
6685
6796
  }
6686
6797
  return `{{bf_spread_attrs .${value.slotId}}}`;
6687
6798
  },
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  isSupported,
32
32
  exprToString,
33
33
  identifierPath,
34
- asCallbackMethodCall as asCallbackMethodCall3,
34
+ asCallbackMethodCall as asCallbackMethodCall4,
35
35
  sortComparatorFromArrow,
36
36
  emitParsedExpr,
37
37
  emitIRNode,
@@ -971,6 +971,14 @@ function renderLoweringNode(ctx, node) {
971
971
  return `${helper} ${parts.join(" ")}`;
972
972
  }
973
973
 
974
+ // src/adapter/value/value-lowering.ts
975
+ import {
976
+ asCallbackMethodCall,
977
+ freeVarsInBody as freeVarsInBody2,
978
+ materializeGetterCalls,
979
+ serializeParsedExpr as serializeParsedExpr2
980
+ } from "@barefootjs/jsx";
981
+
974
982
  // src/adapter/type/type-codegen.ts
975
983
  function collapseLiteralUnion(typeInfo) {
976
984
  if (typeInfo.kind !== "union" || !typeInfo.unionTypes || typeInfo.unionTypes.length === 0) {
@@ -1191,6 +1199,14 @@ function convertInitialValue(ctx, value, _typeInfo, propsParams, preParsed) {
1191
1199
  if (value.startsWith('"') && value.endsWith('"')) {
1192
1200
  return value;
1193
1201
  }
1202
+ if (preParsed) {
1203
+ const chain = matchMapJoinChain(preParsed);
1204
+ if (chain) {
1205
+ const chainGo = mapJoinChainToGo(ctx, chain, [], propsParams ?? [], EMPTY_PROP_FALLBACK_VARS);
1206
+ if (chainGo !== null)
1207
+ return chainGo;
1208
+ }
1209
+ }
1194
1210
  return '""';
1195
1211
  }
1196
1212
  }
@@ -1267,13 +1283,84 @@ function getSignalInitialValueAsGo(ctx, initialValue, propsParams, propFallbackV
1267
1283
  }
1268
1284
  return "0";
1269
1285
  }
1286
+ function matchMapJoinChain(expr) {
1287
+ if (expr.kind !== "array-method" || expr.method !== "join")
1288
+ return null;
1289
+ const mapCb = asCallbackMethodCall(expr.object);
1290
+ if (!mapCb || mapCb.method !== "map")
1291
+ return null;
1292
+ return { object: mapCb.object, arrow: mapCb.arrow, sepArg: expr.args[0] };
1293
+ }
1294
+ function resolveMapJoinBaseAsGo(ctx, object, signals, propsParams) {
1295
+ if (object.kind === "call" && object.callee.kind === "identifier" && object.args.length === 0) {
1296
+ const calleeName = object.callee.name;
1297
+ const sig = signals.find((s) => s.getter === calleeName);
1298
+ if (sig) {
1299
+ const bakeType = ctx.state.synthStructTypes.get(sig.getter) ?? sig.type ?? { kind: "array", raw: "unknown[]" };
1300
+ return convertInitialValue(ctx, sig.initialValue, bakeType, propsParams, sig.parsed);
1301
+ }
1302
+ }
1303
+ const propName = object.kind === "member" && !object.computed && object.object.kind === "identifier" && object.object.name === "props" ? object.property : object.kind === "identifier" ? object.name : null;
1304
+ if (propName && propsParams.some((p) => p.name === propName)) {
1305
+ return `in.${capitalizeFieldName(propName)}`;
1306
+ }
1307
+ if (object.kind === "array-literal") {
1308
+ if (object.elements.length === 0)
1309
+ return "[]interface{}{}";
1310
+ const elems = [];
1311
+ for (const el of object.elements) {
1312
+ const go = el.kind === "object-literal" ? objectLiteralToGoMap(ctx, el) : parsedLiteralToGo(ctx, el);
1313
+ if (go === null)
1314
+ return null;
1315
+ elems.push(go);
1316
+ }
1317
+ return `[]interface{}{${elems.join(", ")}}`;
1318
+ }
1319
+ return null;
1320
+ }
1321
+ function mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars) {
1322
+ const itemsGo = resolveMapJoinBaseAsGo(ctx, chain.object, signals, propsParams);
1323
+ if (itemsGo === null)
1324
+ return null;
1325
+ const knownGetterNames = new Set(signals.map((s) => s.getter));
1326
+ const materialized = materializeGetterCalls(chain.arrow.body, knownGetterNames);
1327
+ const projJSON = serializeParsedExpr2(materialized);
1328
+ if (projJSON === null)
1329
+ return null;
1330
+ const paramName = chain.arrow.params[0] ?? "_";
1331
+ const freeVars = freeVarsInBody2(materialized, new Set(chain.arrow.params));
1332
+ const envEntries = [];
1333
+ for (const name of freeVars) {
1334
+ const sig = signals.find((s) => s.getter === name);
1335
+ let goExpr = null;
1336
+ if (sig) {
1337
+ goExpr = getSignalInitialValueAsGo(ctx, sig.initialValue, propsParams, propFallbackVars, sig.type);
1338
+ } else if (propsParams.some((p) => p.name === name)) {
1339
+ const hoisted = propFallbackVars.get(name);
1340
+ goExpr = hoisted ? hoisted.varName : `in.${capitalizeFieldName(name)}`;
1341
+ }
1342
+ if (goExpr === null)
1343
+ return null;
1344
+ envEntries.push(`${JSON.stringify(name)}: ${goExpr}`);
1345
+ }
1346
+ const envMap = `map[string]any{${envEntries.join(", ")}}`;
1347
+ let sepGo;
1348
+ if (!chain.sepArg) {
1349
+ sepGo = JSON.stringify(",");
1350
+ } else if (chain.sepArg.kind === "literal" && chain.sepArg.literalType === "string") {
1351
+ sepGo = JSON.stringify(chain.sepArg.value);
1352
+ } else {
1353
+ return null;
1354
+ }
1355
+ return `bf.Join(bf.MapEval(${itemsGo}, "${escapeGoString(projJSON)}", ${JSON.stringify(paramName)}, ${envMap}), ${sepGo})`;
1356
+ }
1270
1357
 
1271
1358
  // src/adapter/memo/memo-type.ts
1272
- import { asCallbackMethodCall } from "@barefootjs/jsx";
1359
+ import { asCallbackMethodCall as asCallbackMethodCall2 } from "@barefootjs/jsx";
1273
1360
  function isListFilterMemo(memo) {
1274
1361
  if (!memo.parsed)
1275
1362
  return false;
1276
- const cb = asCallbackMethodCall(memo.parsed);
1363
+ const cb = asCallbackMethodCall2(memo.parsed);
1277
1364
  return cb !== null && cb.method === "filter";
1278
1365
  }
1279
1366
  function isBooleanMemo(ctx, memo, signals, propsParamMap) {
@@ -1572,10 +1659,10 @@ function computeObjectMemoInitialValue(ctx, memo) {
1572
1659
 
1573
1660
  // src/adapter/memo/memo-compute.ts
1574
1661
  import {
1575
- asCallbackMethodCall as asCallbackMethodCall2,
1576
- freeVarsInBody as freeVarsInBody2,
1577
- materializeGetterCalls,
1578
- serializeParsedExpr as serializeParsedExpr2
1662
+ asCallbackMethodCall as asCallbackMethodCall3,
1663
+ freeVarsInBody as freeVarsInBody3,
1664
+ materializeGetterCalls as materializeGetterCalls2,
1665
+ serializeParsedExpr as serializeParsedExpr3
1579
1666
  } from "@barefootjs/jsx";
1580
1667
 
1581
1668
  // src/adapter/memo/template-interp.ts
@@ -1750,7 +1837,7 @@ function propNameForPropsBinding(ctx, e) {
1750
1837
  return null;
1751
1838
  }
1752
1839
  function matchFilterArmMemo(ctx, body, signals, propsParams) {
1753
- const cb = asCallbackMethodCall2(body);
1840
+ const cb = asCallbackMethodCall3(body);
1754
1841
  if (!cb || cb.method !== "filter")
1755
1842
  return null;
1756
1843
  const propName = propsMemberName(cb.object);
@@ -1758,12 +1845,12 @@ function matchFilterArmMemo(ctx, body, signals, propsParams) {
1758
1845
  if (!propName || !param)
1759
1846
  return null;
1760
1847
  const knownGetterNames = new Set(ctx.state.ssrSeedPlan.steps.filter((s) => s.kind !== "env-reader").map((s) => s.name));
1761
- const materialized = materializeGetterCalls(cb.arrow.body, knownGetterNames);
1762
- const predJSON = serializeParsedExpr2(materialized);
1848
+ const materialized = materializeGetterCalls2(cb.arrow.body, knownGetterNames);
1849
+ const predJSON = serializeParsedExpr3(materialized);
1763
1850
  if (predJSON === null)
1764
1851
  return null;
1765
1852
  const paramName = cb.arrow.params[0] ?? "_";
1766
- const freeVars = freeVarsInBody2(materialized, new Set(cb.arrow.params));
1853
+ const freeVars = freeVarsInBody3(materialized, new Set(cb.arrow.params));
1767
1854
  return { propName, predJSON, paramName, freeVars };
1768
1855
  }
1769
1856
  function filterArmEarlierSiblingRefs(ctx, memo, signals, propsParams) {
@@ -2005,6 +2092,30 @@ function memoInitialFromParsedBody(ctx, body, signals, propsParams, propFallback
2005
2092
  if (param)
2006
2093
  return `in.${capitalizeFieldName(body.name)}`;
2007
2094
  }
2095
+ if (body.kind === "binary" && body.op === "+") {
2096
+ const concatGo = resolveStringConcatChainGo(ctx, body, signals, propsParams, propFallbackVars, propRef);
2097
+ if (concatGo !== null)
2098
+ return concatGo;
2099
+ }
2100
+ return null;
2101
+ }
2102
+ function resolveStringConcatChainGo(ctx, expr, signals, propsParams, propFallbackVars, propRef) {
2103
+ if (expr.kind === "binary" && expr.op === "+") {
2104
+ const l = resolveStringConcatChainGo(ctx, expr.left, signals, propsParams, propFallbackVars, propRef);
2105
+ const r = resolveStringConcatChainGo(ctx, expr.right, signals, propsParams, propFallbackVars, propRef);
2106
+ return l !== null && r !== null ? `${l} + ${r}` : null;
2107
+ }
2108
+ if (expr.kind === "literal" && expr.literalType === "string") {
2109
+ return JSON.stringify(expr.value);
2110
+ }
2111
+ const propName = propsMemberName(expr) ?? (expr.kind === "identifier" ? expr.name : null);
2112
+ if (propName && propsParams.some((p) => p.name === propName)) {
2113
+ return propRef(propName);
2114
+ }
2115
+ const chain = matchMapJoinChain(expr);
2116
+ if (chain) {
2117
+ return mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars);
2118
+ }
2008
2119
  return null;
2009
2120
  }
2010
2121
  function computeMemoInitialValueOrNull(ctx, memo, signals, propsParams, propFallbackVars = EMPTY_PROP_FALLBACK_VARS2, resolving = new Set) {
@@ -4831,7 +4942,7 @@ ${goFields.join(`
4831
4942
  return `${obj}.${goFieldNameForKey(property)}`;
4832
4943
  }
4833
4944
  indexAccess(object, index, emit) {
4834
- return `index ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
4945
+ return `bf_get ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`;
4835
4946
  }
4836
4947
  binary(op, left, right, emit) {
4837
4948
  const l = emit(left);
@@ -4963,7 +5074,7 @@ ${goFields.join(`
4963
5074
  "some"
4964
5075
  ]);
4965
5076
  higherOrderShapeOf(node) {
4966
- const cb = asCallbackMethodCall3(node);
5077
+ const cb = asCallbackMethodCall4(node);
4967
5078
  if (!cb)
4968
5079
  return null;
4969
5080
  if (!GoTemplateAdapter.PREDICATE_METHODS.has(cb.method))
@@ -5411,7 +5522,7 @@ ${goFields.join(`
5411
5522
  if (expr.callee.kind === "identifier" && expr.args.length === 0) {
5412
5523
  return `$.${capitalizeFieldName(expr.callee.name)}`;
5413
5524
  }
5414
- if (asCallbackMethodCall3(expr) !== null) {
5525
+ if (asCallbackMethodCall4(expr) !== null) {
5415
5526
  return this.refuseFilterExprNode(expr);
5416
5527
  }
5417
5528
  const result = this.renderFilterExpr(expr.callee, param, localVarMap, datumField);
@@ -5830,7 +5941,7 @@ ${goFields.join(`
5830
5941
  });
5831
5942
  return plain("false");
5832
5943
  }
5833
- if (asCallbackMethodCall3(expr)) {
5944
+ if (asCallbackMethodCall4(expr)) {
5834
5945
  const rendered = this.renderParsedExpr(expr);
5835
5946
  const split = this.splitPreamble(rendered);
5836
5947
  if (split)
@@ -6332,7 +6443,7 @@ ${children}`;
6332
6443
  const trimmed = value.expr.trim();
6333
6444
  const currentLoopParam = this.loopParamStack[this.loopParamStack.length - 1];
6334
6445
  if (currentLoopParam && trimmed === currentLoopParam) {
6335
- return `{{bf_spread_attrs .}}`;
6446
+ return `{{bf_spread_attrs (bf_js_keys .)}}`;
6336
6447
  }
6337
6448
  const restInfo = this.lookupRestExclude(trimmed);
6338
6449
  if (restInfo) {
@@ -6341,7 +6452,7 @@ ${children}`;
6341
6452
  return `{{bf_spread_attrs (bf_omit ${omitArgs})}}`;
6342
6453
  }
6343
6454
  const goExpr = this.convertExpressionToGo(value.expr);
6344
- return `{{bf_spread_attrs ${goExpr}}}`;
6455
+ return `{{bf_spread_attrs (bf_js_keys ${wrapIfMultiToken(goExpr)})}}`;
6345
6456
  }
6346
6457
  return `{{bf_spread_attrs .${value.slotId}}}`;
6347
6458
  },
@@ -6504,11 +6615,7 @@ var conformancePins = {
6504
6615
  };
6505
6616
  // src/render-divergences.ts
6506
6617
  var renderDivergences = {
6507
- "aliased-destructured-prop": 'aliased destructured prop `{ n: count }` loses its rename — the Input struct field is Count `json:"count"`, so the caller-side struct literal keyed by the real prop name fails `go run` outright (unknown field N, exit 1) (https://github.com/piconic-ai/barefootjs/issues/2460)',
6508
- "nested-loop-tail-content": "the `inLoop` clobber is FIXED (#2487) — outer-row content after a nested loop now takes the loop arms and the spread resolves row-scoped. Residual: the spread's attribute NAMES are still mangled by the Go-cased-key kebab conversion (`data-kind` → `-data-kind`), which is #2490; this entry graduates with that fix (https://github.com/piconic-ai/barefootjs/issues/2490)",
6509
- "loop-param-shadows-spread-const": "spreading a loop row object mangles attribute names (`id` → `-i-d`, `title` → `-title`); the spread VALUE is correctly row-scoped, distinguishing this from the template-adapter const-shadow hole #2489 (https://github.com/piconic-ai/barefootjs/issues/2490)",
6510
- "loop-param-shadows-record-template-span": "a dynamic-key element access on a loop row (`tone[k]`) renders empty at execute time — the emitted template contains no baked const (correct post-fix), but the row lookup resolves to nothing (https://github.com/piconic-ai/barefootjs/issues/2491)",
6511
- "callback-param-shadows-prop": "JS-computed signal/memo initializers (`[…].map(…).join(…)`, memo over signal + prop) don't seed Go SSR — renders `[]` / empty where every other adapter renders the computed value; hydration snaps to correct (https://github.com/piconic-ai/barefootjs/issues/2492)"
6618
+ "aliased-destructured-prop": 'aliased destructured prop `{ n: count }` loses its rename — the Input struct field is Count `json:"count"`, so the caller-side struct literal keyed by the real prop name fails `go run` outright (unknown field N, exit 1) (https://github.com/piconic-ai/barefootjs/issues/2460)'
6512
6619
  };
6513
6620
  export {
6514
6621
  renderDivergences,
@@ -1 +1 @@
1
- {"version":3,"file":"render-divergences.d.ts","sourceRoot":"","sources":["../src/render-divergences.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,iBAAiB,EAAE,iBAoC/B,CAAA"}
1
+ {"version":3,"file":"render-divergences.d.ts","sourceRoot":"","sources":["../src/render-divergences.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,eAAO,MAAM,iBAAiB,EAAE,iBAwB/B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barefootjs/go-template",
3
- "version": "0.30.3",
3
+ "version": "0.30.5",
4
4
  "description": "Go html/template adapter for BarefootJS - generates Go template files from IR",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,7 +49,7 @@
49
49
  "directory": "packages/adapter-go-template"
50
50
  },
51
51
  "dependencies": {
52
- "@barefootjs/shared": "0.30.3"
52
+ "@barefootjs/shared": "0.30.5"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@barefootjs/jsx": ">=0.2.0",
@@ -57,6 +57,6 @@
57
57
  },
58
58
  "devDependencies": {
59
59
  "@barefootjs/adapter-tests": "0.1.0",
60
- "@barefootjs/jsx": "0.30.2"
60
+ "@barefootjs/jsx": "0.30.5"
61
61
  }
62
62
  }
@@ -4024,11 +4024,22 @@ export class GoTemplateAdapter extends BaseAdapter implements ParsedExprEmitter,
4024
4024
  }
4025
4025
 
4026
4026
  indexAccess(object: ParsedExpr, index: ParsedExpr, emit: (e: ParsedExpr) => string): string {
4027
- // Go's `index` builtin: `index $arr $i`. Both operands render through the
4028
- // same emitter so a loop-variable / arithmetic index lowers correctly. A
4029
- // multi-token operand (`bf_add $i 1`) must be parenthesised or Go parses it
4030
- // as extra `index` arguments.
4031
- return `index ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`
4027
+ // Go's builtin `index` is exact-case only, and the shared analyzer
4028
+ // types a dynamic index (e.g. a destructured .map() param used as a
4029
+ // key, `tone[k]`) as `{kind:'unknown'}` there is no compile-time
4030
+ // witness available to guess whether the runtime value will be a
4031
+ // string key or a numeric index (#2491). Route through the runtime's
4032
+ // case-tolerant, kind-polymorphic `bf_get` (`getFieldValue`, bf.go)
4033
+ // instead of guessing: it dispatches on the receiver's REFLECTED
4034
+ // kind (map/struct vs slice/array/string) and accepts either a
4035
+ // string or numeric `field` argument, so it's a strict superset of
4036
+ // `index` — genuine numeric-index uses (`selected()[i]`) keep
4037
+ // working, and string-keyed row lookups now resolve too. Both
4038
+ // operands render through the same emitter so a loop-variable /
4039
+ // arithmetic index lowers correctly. A multi-token operand
4040
+ // (`bf_add $i 1`) must be parenthesised or Go parses it as extra
4041
+ // `bf_get` arguments.
4042
+ return `bf_get ${wrapIfMultiToken(emit(object))} ${wrapIfMultiToken(emit(index))}`
4032
4043
  }
4033
4044
 
4034
4045
  binary(op: string, left: ParsedExpr, right: ParsedExpr, emit: (e: ParsedExpr) => string): string {
@@ -6828,7 +6839,15 @@ export class GoTemplateAdapter extends BaseAdapter implements ParsedExprEmitter,
6828
6839
  const trimmed = value.expr.trim()
6829
6840
  const currentLoopParam = this.loopParamStack[this.loopParamStack.length - 1]
6830
6841
  if (currentLoopParam && trimmed === currentLoopParam) {
6831
- return `{{bf_spread_attrs .}}`
6842
+ // The row's keys are Go-cased by the field-access contract: the
6843
+ // same lowering that makes `attrs.id` emit `{{.ID}}`
6844
+ // (`goFieldNameForKey` → `capitalizeFieldName`) requires the
6845
+ // seeded row map/struct to be keyed `ID`/`Title`/`DataKind`.
6846
+ // `bf_js_keys` (bf.go) undoes just that capitalization — struct
6847
+ // via json tag, map via the `capitalizeFieldName` inverse —
6848
+ // before `toAttrName`'s UNCHANGED camelCase→kebab conversion
6849
+ // sees the real JS names (#2490).
6850
+ return `{{bf_spread_attrs (bf_js_keys .)}}`
6832
6851
  }
6833
6852
  // Destructure object-rest spread onto an element (`{...rest}`, #2087
6834
6853
  // Phase B): `rest` alone would spread the WHOLE item (every field,
@@ -6837,17 +6856,32 @@ export class GoTemplateAdapter extends BaseAdapter implements ParsedExprEmitter,
6837
6856
  // exactly those sibling keys. Only a spread whose expr is the BARE
6838
6857
  // rest name matches (`isLowerableLoopDestructure`'s admitted shape);
6839
6858
  // anything else (`{...fn(rest)}`) already refused at the IR gate.
6859
+ // `Omit` already recovers original names via json tag (struct) /
6860
+ // passthrough (map), so this arm does NOT need `bf_js_keys`.
6840
6861
  const restInfo = this.lookupRestExclude(trimmed)
6841
6862
  if (restInfo) {
6842
6863
  const excludeArgs = restInfo.excludeKeys.map(k => JSON.stringify(k)).join(' ')
6843
6864
  const omitArgs = excludeArgs ? `${restInfo.parent} ${excludeArgs}` : restInfo.parent
6844
6865
  return `{{bf_spread_attrs (bf_omit ${omitArgs})}}`
6845
6866
  }
6867
+ // A field/member read off the loop row (`{...g.extra}`) — same
6868
+ // Go-casing exposure as the bare-item case above, PLUS an
6869
+ // ambiguity the compiler can't resolve at compile time: a
6870
+ // `Record<string, string>` field's runtime map could have been
6871
+ // seeded with JS-native data keys (`data-kind`) OR Go-cased
6872
+ // field-name keys, and nothing in the TYPE says which. `bf_js_keys`
6873
+ // is a no-op on an already-lowercase-first-rune key (lowercasing
6874
+ // `data-kind`'s first rune changes nothing) and corrective on a
6875
+ // Go-cased one, so wrapping here is safe for both conventions
6876
+ // rather than betting on one (#2490).
6846
6877
  const goExpr = this.convertExpressionToGo(value.expr)
6847
6878
  // `convertExpressionToGo` already pushes BF101 for unsupported
6848
6879
  // expressions and returns `""`; pass through so the template still
6849
6880
  // compiles.
6850
- return `{{bf_spread_attrs ${goExpr}}}`
6881
+ // `goExpr` is not necessarily a single token — a member spread can
6882
+ // lower to a pipeline (`bf_get . $.K`), which the template parser
6883
+ // would otherwise read as extra ARGUMENTS to `bf_js_keys`.
6884
+ return `{{bf_spread_attrs (bf_js_keys ${wrapIfMultiToken(goExpr)})}}`
6851
6885
  }
6852
6886
  return `{{bf_spread_attrs .${value.slotId}}}`
6853
6887
  },
@@ -20,7 +20,12 @@ import type { GoEmitContext } from '../emit-context.ts'
20
20
  import type { PropFallbackVar } from '../lib/types.ts'
21
21
  import { capitalizeFieldName } from '../lib/go-naming.ts'
22
22
  import { escapeGoString } from '../lib/go-emit.ts'
23
- import { convertInitialValue, getSignalInitialValueAsGo } from '../value/value-lowering.ts'
23
+ import {
24
+ convertInitialValue,
25
+ getSignalInitialValueAsGo,
26
+ mapJoinChainToGo,
27
+ matchMapJoinChain,
28
+ } from '../value/value-lowering.ts'
24
29
  import { typeInfoToGo } from '../type/type-codegen.ts'
25
30
  import { computeTemplateLiteralMemoInitialValue } from './template-interp.ts'
26
31
  import { resolveBlockBodyMemoModuleConst, computeObjectMemoInitialValue } from './memo-value.ts'
@@ -572,6 +577,60 @@ export function memoInitialFromParsedBody(
572
577
  if (param) return `in.${capitalizeFieldName(body.name)}`
573
578
  }
574
579
 
580
+ // () => <a> + <b> + … — a string-concatenation chain whose every leaf is a
581
+ // string literal, a prop reference, or a `.map(cb).join(sep)` chain
582
+ // (#2492's `joined` memo: `title + ':' + items().map((title) =>
583
+ // title.a).join(',')`). Doesn't grow into a general `binary` catalogue
584
+ // entry — only fires for a pure `+` tree resolvable end-to-end via
585
+ // `resolveStringConcatChainGo`; any other leaf shape falls through to the
586
+ // caller's zero-value default, same as any other unsupported shape.
587
+ if (body.kind === 'binary' && body.op === '+') {
588
+ const concatGo = resolveStringConcatChainGo(ctx, body, signals, propsParams, propFallbackVars, propRef)
589
+ if (concatGo !== null) return concatGo
590
+ }
591
+
592
+ return null
593
+ }
594
+
595
+ /**
596
+ * `<expr> + <expr> + …` chain whose every leaf resolves to a Go string
597
+ * expression: a string literal, a prop reference (`propRef`, hoisted-aware),
598
+ * or a `.map(cb).join(sep)` chain ({@link matchMapJoinChain} /
599
+ * {@link mapJoinChainToGo} — `value-lowering.ts`, #2492). Recurses on nested
600
+ * `+` so a left-associative chain (`a + b + c` parses as `(a + b) + c`)
601
+ * resolves leaf-by-leaf.
602
+ *
603
+ * @returns the concatenated Go expression, or null when any leaf isn't one
604
+ * of the three shapes above
605
+ */
606
+ function resolveStringConcatChainGo(
607
+ ctx: GoEmitContext,
608
+ expr: ParsedExpr,
609
+ signals: { getter: string; initialValue: string; type?: TypeInfo }[],
610
+ propsParams: { name: string; type?: TypeInfo; defaultValue?: string }[],
611
+ propFallbackVars: ReadonlyMap<string, PropFallbackVar>,
612
+ propRef: (propName: string) => string,
613
+ ): string | null {
614
+ if (expr.kind === 'binary' && expr.op === '+') {
615
+ const l = resolveStringConcatChainGo(ctx, expr.left, signals, propsParams, propFallbackVars, propRef)
616
+ const r = resolveStringConcatChainGo(ctx, expr.right, signals, propsParams, propFallbackVars, propRef)
617
+ return l !== null && r !== null ? `${l} + ${r}` : null
618
+ }
619
+
620
+ if (expr.kind === 'literal' && expr.literalType === 'string') {
621
+ return JSON.stringify(expr.value)
622
+ }
623
+
624
+ const propName = propsMemberName(expr) ?? (expr.kind === 'identifier' ? expr.name : null)
625
+ if (propName && propsParams.some(p => p.name === propName)) {
626
+ return propRef(propName)
627
+ }
628
+
629
+ const chain = matchMapJoinChain(expr)
630
+ if (chain) {
631
+ return mapJoinChainToGo(ctx, chain, signals, propsParams, propFallbackVars)
632
+ }
633
+
575
634
  return null
576
635
  }
577
636
 
@@ -6,10 +6,17 @@
6
6
  */
7
7
 
8
8
  import type { ParsedExpr, TypeInfo } from '@barefootjs/jsx'
9
+ import {
10
+ asCallbackMethodCall,
11
+ freeVarsInBody,
12
+ materializeGetterCalls,
13
+ serializeParsedExpr,
14
+ } from '@barefootjs/jsx'
9
15
 
10
16
  import type { GoEmitContext } from '../emit-context.ts'
11
17
  import type { PropFallbackVar } from '../lib/types.ts'
12
18
  import { capitalizeFieldName } from '../lib/go-naming.ts'
19
+ import { escapeGoString } from '../lib/go-emit.ts'
13
20
  import { parsedLiteralToGo } from './parsed-literal-to-go.ts'
14
21
  import { collapseLiteralUnion } from '../type/type-codegen.ts'
15
22
 
@@ -103,6 +110,20 @@ export function convertInitialValue(
103
110
  if (value.startsWith('"') && value.endsWith('"')) {
104
111
  return value
105
112
  }
113
+ // A `.map(cb).join(sep)` chain (#2492): the analyzer's `.join()`
114
+ // trailing-suffix rule (`inferTypeFromValue`) types a signal carrying
115
+ // this shape `string`, so it lands HERE rather than the `array`
116
+ // branch below — bake it the same way a memo's derived `.map().join()`
117
+ // value bakes (`memoInitialFromParsedBody`'s sibling arm in
118
+ // `memo-compute.ts`), through the runtime evaluator's `MapEval` +
119
+ // `Join` composition, instead of falling to the `""` zero value.
120
+ if (preParsed) {
121
+ const chain = matchMapJoinChain(preParsed)
122
+ if (chain) {
123
+ const chainGo = mapJoinChainToGo(ctx, chain, [], propsParams ?? [], EMPTY_PROP_FALLBACK_VARS)
124
+ if (chainGo !== null) return chainGo
125
+ }
126
+ }
106
127
  return '""'
107
128
  }
108
129
  }
@@ -243,3 +264,154 @@ export function getSignalInitialValueAsGo(
243
264
 
244
265
  return '0'
245
266
  }
267
+
268
+ /**
269
+ * A value-producing `.map(cb).join(sep)` chain — `<object>.map((param) =>
270
+ * <body>).join(<sepExpr>)` — the constructor-Go-source analogue of the
271
+ * template-position `bf_join (bf_map_eval …)` lowering (`emitMapEval`,
272
+ * `go-emit.ts`). `.join(...)` folds to the `array-method` IR node at parse
273
+ * time (`expression-parser.ts`); its `object` is recognised as a `.map(cb)`
274
+ * callback call via `asCallbackMethodCall` (the same recognition
275
+ * `matchFilterArmMemo`, `memo-compute.ts`, uses for `.filter`). Returns the
276
+ * receiver array, the mapper arrow, and the join separator argument (absent
277
+ * when `.join()` was called with no argument — JS defaults to `,`), or null
278
+ * when `expr` isn't this shape.
279
+ */
280
+ export function matchMapJoinChain(expr: ParsedExpr): {
281
+ object: ParsedExpr
282
+ arrow: Extract<ParsedExpr, { kind: 'arrow' }>
283
+ sepArg?: ParsedExpr
284
+ } | null {
285
+ if (expr.kind !== 'array-method' || expr.method !== 'join') return null
286
+ const mapCb = asCallbackMethodCall(expr.object)
287
+ if (!mapCb || mapCb.method !== 'map') return null
288
+ return { object: mapCb.object, arrow: mapCb.arrow, sepArg: expr.args[0] }
289
+ }
290
+
291
+ /**
292
+ * Resolve a `.map().join()` chain's receiver array to a Go expression — a
293
+ * signal-backed field, a prop field, or an inline array literal.
294
+ *
295
+ * A SIGNAL receiver (`items()`) re-derives the signal's own initial value
296
+ * from ITS OWN initializer (`convertInitialValue`, baked against the
297
+ * synthesised element struct in `state.synthStructTypes` when one was
298
+ * inferred for it) rather than referencing a struct field — this expression
299
+ * is itself one field value inside the SAME `<Props>{ ... }` composite
300
+ * literal the signal's own field is being built into, so it can't reference
301
+ * a sibling field by name. Mirrors `resolveGetterValueAsGo` /
302
+ * `getSignalInitialValueAsGo`'s existing convention of re-deriving a
303
+ * referenced signal rather than pointing at a not-yet-assigned field.
304
+ *
305
+ * A PROP receiver (`props.X` / bare destructured `X`) resolves to a bare
306
+ * `in.<Field>` reference, mirroring `matchFilterArmMemo`'s `itemsField` (no
307
+ * nillable-scalar type assertion — the receiver is an array, never one of
308
+ * the scalar kinds that assertion guards).
309
+ *
310
+ * An array-LITERAL receiver bakes element-by-element: an object element goes
311
+ * through `objectLiteralToGoMap` (a plain `map[string]interface{}`, source-
312
+ * cased keys) rather than `jsLiteralToGo`'s struct-backed baking, since this
313
+ * nested literal is a `.map()` RECEIVER, not a signal's own typed value, and
314
+ * so has no named struct synthesised for it.
315
+ *
316
+ * @returns the Go expression, or null when the receiver isn't one of the
317
+ * three shapes above, or an object-array-literal element doesn't bake.
318
+ */
319
+ function resolveMapJoinBaseAsGo(
320
+ ctx: GoEmitContext,
321
+ object: ParsedExpr,
322
+ signals: { getter: string; initialValue: string; type?: TypeInfo; parsed?: ParsedExpr }[],
323
+ propsParams: { name: string }[],
324
+ ): string | null {
325
+ if (object.kind === 'call' && object.callee.kind === 'identifier' && object.args.length === 0) {
326
+ const calleeName = object.callee.name
327
+ const sig = signals.find(s => s.getter === calleeName)
328
+ if (sig) {
329
+ const bakeType = ctx.state.synthStructTypes.get(sig.getter) ?? sig.type ?? { kind: 'array', raw: 'unknown[]' }
330
+ return convertInitialValue(ctx, sig.initialValue, bakeType, propsParams, sig.parsed)
331
+ }
332
+ }
333
+
334
+ const propName =
335
+ object.kind === 'member' && !object.computed && object.object.kind === 'identifier' && object.object.name === 'props'
336
+ ? object.property
337
+ : object.kind === 'identifier'
338
+ ? object.name
339
+ : null
340
+ if (propName && propsParams.some(p => p.name === propName)) {
341
+ return `in.${capitalizeFieldName(propName)}`
342
+ }
343
+
344
+ if (object.kind === 'array-literal') {
345
+ if (object.elements.length === 0) return '[]interface{}{}'
346
+ const elems: string[] = []
347
+ for (const el of object.elements) {
348
+ const go = el.kind === 'object-literal' ? objectLiteralToGoMap(ctx, el) : parsedLiteralToGo(ctx, el)
349
+ if (go === null) return null
350
+ elems.push(go)
351
+ }
352
+ return `[]interface{}{${elems.join(', ')}}`
353
+ }
354
+
355
+ return null
356
+ }
357
+
358
+ /**
359
+ * Lower a `.map(cb).join(sep)` chain (matched by {@link matchMapJoinChain})
360
+ * to a `bf.Join(bf.MapEval(<items>, "<projJSON>", "<param>", <envMap>),
361
+ * <sep>)` Go expression — the constructor-source analogue of
362
+ * `matchFilterArmMemo`'s `bf.FilterEval` emit (`memo-compute.ts`), reusing
363
+ * the SAME two runtime evaluator functions (`MapEval`, `eval.go`; `Join`,
364
+ * `bf.go`) the template-position `bf_map_eval`/`bf_join` lowering already
365
+ * calls. Shared by a memo's derived value (`memoInitialFromParsedBody`'s
366
+ * concatenation-chain arm) and a SIGNAL's own initializer
367
+ * (`convertInitialValue`'s `string` branch, #2492).
368
+ *
369
+ * @returns the Go expression, or null when the receiver doesn't resolve
370
+ * ({@link resolveMapJoinBaseAsGo}), the projection body isn't
371
+ * representable to the runtime evaluator (`serializeParsedExpr` refusal),
372
+ * a captured free variable doesn't resolve, or the separator isn't a
373
+ * string literal (a dynamic separator — out of scope for this arm).
374
+ */
375
+ export function mapJoinChainToGo(
376
+ ctx: GoEmitContext,
377
+ chain: { object: ParsedExpr; arrow: Extract<ParsedExpr, { kind: 'arrow' }>; sepArg?: ParsedExpr },
378
+ signals: { getter: string; initialValue: string; type?: TypeInfo; parsed?: ParsedExpr }[],
379
+ propsParams: { name: string }[],
380
+ propFallbackVars: ReadonlyMap<string, PropFallbackVar>,
381
+ ): string | null {
382
+ const itemsGo = resolveMapJoinBaseAsGo(ctx, chain.object, signals, propsParams)
383
+ if (itemsGo === null) return null
384
+
385
+ const knownGetterNames = new Set(signals.map(s => s.getter))
386
+ const materialized = materializeGetterCalls(chain.arrow.body, knownGetterNames)
387
+ const projJSON = serializeParsedExpr(materialized)
388
+ if (projJSON === null) return null
389
+
390
+ const paramName = chain.arrow.params[0] ?? '_'
391
+ const freeVars = freeVarsInBody(materialized, new Set(chain.arrow.params))
392
+ const envEntries: string[] = []
393
+ for (const name of freeVars) {
394
+ const sig = signals.find(s => s.getter === name)
395
+ let goExpr: string | null = null
396
+ if (sig) {
397
+ goExpr = getSignalInitialValueAsGo(ctx, sig.initialValue, propsParams, propFallbackVars, sig.type)
398
+ } else if (propsParams.some(p => p.name === name)) {
399
+ const hoisted = propFallbackVars.get(name)
400
+ goExpr = hoisted ? hoisted.varName : `in.${capitalizeFieldName(name)}`
401
+ }
402
+ if (goExpr === null) return null
403
+ envEntries.push(`${JSON.stringify(name)}: ${goExpr}`)
404
+ }
405
+ const envMap = `map[string]any{${envEntries.join(', ')}}`
406
+
407
+ let sepGo: string
408
+ if (!chain.sepArg) {
409
+ sepGo = JSON.stringify(',')
410
+ } else if (chain.sepArg.kind === 'literal' && chain.sepArg.literalType === 'string') {
411
+ sepGo = JSON.stringify(chain.sepArg.value)
412
+ } else {
413
+ return null
414
+ }
415
+
416
+ return `bf.Join(bf.MapEval(${itemsGo}, "${escapeGoString(projJSON)}", ${JSON.stringify(paramName)}, ${envMap}), ${sepGo})`
417
+ }
@@ -40,16 +40,4 @@ export const renderDivergences: RenderDivergences = {
40
40
  // `skipJsx` entries).
41
41
  'aliased-destructured-prop':
42
42
  'aliased destructured prop `{ n: count }` loses its rename — the Input struct field is Count `json:"count"`, so the caller-side struct literal keyed by the real prop name fails `go run` outright (unknown field N, exit 1) (https://github.com/piconic-ai/barefootjs/issues/2460)',
43
-
44
- // #2482 audit follow-ups: loop-scope holes specific to this adapter's
45
- // four-stack scope tracking and its SSR seeding. Graduate by applying
46
- // the fix described in each issue and deleting the line.
47
- 'nested-loop-tail-content':
48
- 'the `inLoop` clobber is FIXED (#2487) — outer-row content after a nested loop now takes the loop arms and the spread resolves row-scoped. Residual: the spread\'s attribute NAMES are still mangled by the Go-cased-key kebab conversion (`data-kind` → `-data-kind`), which is #2490; this entry graduates with that fix (https://github.com/piconic-ai/barefootjs/issues/2490)',
49
- 'loop-param-shadows-spread-const':
50
- 'spreading a loop row object mangles attribute names (`id` → `-i-d`, `title` → `-title`); the spread VALUE is correctly row-scoped, distinguishing this from the template-adapter const-shadow hole #2489 (https://github.com/piconic-ai/barefootjs/issues/2490)',
51
- 'loop-param-shadows-record-template-span':
52
- 'a dynamic-key element access on a loop row (`tone[k]`) renders empty at execute time — the emitted template contains no baked const (correct post-fix), but the row lookup resolves to nothing (https://github.com/piconic-ai/barefootjs/issues/2491)',
53
- 'callback-param-shadows-prop':
54
- 'JS-computed signal/memo initializers (`[…].map(…).join(…)`, memo over signal + prop) don\'t seed Go SSR — renders `[]` / empty where every other adapter renders the computed value; hydration snaps to correct (https://github.com/piconic-ai/barefootjs/issues/2492)',
55
43
  }