@barefootjs/jsx 0.6.0 → 0.7.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.
Files changed (38) hide show
  1. package/dist/adapters/parsed-expr-emitter.d.ts +14 -1
  2. package/dist/adapters/parsed-expr-emitter.d.ts.map +1 -1
  3. package/dist/expression-parser.d.ts +137 -0
  4. package/dist/expression-parser.d.ts.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +335 -5
  8. package/dist/ir-to-client-js/collect-elements.d.ts.map +1 -1
  9. package/dist/ir-to-client-js/plan/build-static-array-child-init.d.ts +4 -0
  10. package/dist/ir-to-client-js/plan/build-static-array-child-init.d.ts.map +1 -1
  11. package/dist/ir-to-client-js/plan/static-array-child-init.d.ts +46 -2
  12. package/dist/ir-to-client-js/plan/static-array-child-init.d.ts.map +1 -1
  13. package/dist/ir-to-client-js/stringify/static-array-child-init.d.ts.map +1 -1
  14. package/dist/ir-to-client-js/types.d.ts +8 -1
  15. package/dist/ir-to-client-js/types.d.ts.map +1 -1
  16. package/dist/types.d.ts +9 -0
  17. package/dist/types.d.ts.map +1 -1
  18. package/package.json +2 -2
  19. package/src/__tests__/__snapshots__/doc-examples.test.ts.snap +7 -7
  20. package/src/__tests__/child-components-in-map.test.ts +84 -0
  21. package/src/__tests__/client-js-generation.test.ts +51 -0
  22. package/src/__tests__/compiler-stress-1244.test.ts +43 -0
  23. package/src/__tests__/expression-parser.test.ts +109 -1
  24. package/src/__tests__/foreach-client-only.test.ts +80 -0
  25. package/src/__tests__/ir-async.test.ts +64 -0
  26. package/src/__tests__/ir-dynamic-tag.test.ts +104 -0
  27. package/src/__tests__/ir-reduce-op.test.ts +51 -0
  28. package/src/__tests__/reduce-op.test.ts +201 -0
  29. package/src/adapters/parsed-expr-emitter.ts +43 -1
  30. package/src/expression-parser.ts +570 -4
  31. package/src/index.ts +1 -1
  32. package/src/ir-to-client-js/collect-elements.ts +27 -4
  33. package/src/ir-to-client-js/plan/build-static-array-child-init.ts +55 -1
  34. package/src/ir-to-client-js/plan/static-array-child-init.ts +47 -1
  35. package/src/ir-to-client-js/stringify/static-array-child-init.ts +69 -0
  36. package/src/ir-to-client-js/types.ts +8 -1
  37. package/src/jsx-to-ir.ts +69 -0
  38. package/src/types.ts +9 -0
package/dist/index.js CHANGED
@@ -5339,7 +5339,6 @@ var UNSUPPORTED_METHODS = new Set([
5339
5339
  "some",
5340
5340
  "forEach",
5341
5341
  "flatMap",
5342
- "flat",
5343
5342
  "replaceAll",
5344
5343
  "charAt",
5345
5344
  "charCodeAt",
@@ -5351,6 +5350,9 @@ var UNSUPPORTED_METHODS = new Set([
5351
5350
  "matchAll",
5352
5351
  "search"
5353
5352
  ]);
5353
+ var UNSUPPORTED_METHOD_REASONS = {
5354
+ forEach: `'.forEach()' returns undefined and has no template-position meaning. ` + `Use it for side effects inside an event handler or createEffect callback ` + `(client JS), or use '.map(...)' if you meant to render each item.`
5355
+ };
5354
5356
  var LOWERED_ARRAY_METHODS = new Set([
5355
5357
  "includes",
5356
5358
  "indexOf",
@@ -5438,6 +5440,32 @@ function convertNode(node, raw) {
5438
5440
  if (callee.property === "reverse" || callee.property === "toReversed") {
5439
5441
  return { kind: "array-method", method: callee.property, object: callee.object, args };
5440
5442
  }
5443
+ if (callee.property === "flat") {
5444
+ const depthNode = node.arguments[0];
5445
+ let flatDepth;
5446
+ if (depthNode === undefined) {
5447
+ flatDepth = 1;
5448
+ } else if (ts8.isIdentifier(depthNode) && depthNode.text === "Infinity") {
5449
+ flatDepth = "infinity";
5450
+ } else {
5451
+ let n;
5452
+ if (ts8.isNumericLiteral(depthNode)) {
5453
+ n = Number(depthNode.text);
5454
+ } else if (ts8.isPrefixUnaryExpression(depthNode) && depthNode.operator === ts8.SyntaxKind.MinusToken && ts8.isNumericLiteral(depthNode.operand)) {
5455
+ n = -Number(depthNode.operand.text);
5456
+ }
5457
+ if (n === undefined || Number.isNaN(n)) {
5458
+ return {
5459
+ kind: "unsupported",
5460
+ raw,
5461
+ reason: `\`.flat(depth)\` needs a literal integer or \`Infinity\` depth — a computed depth can't be resolved at template time. Use a literal depth, or pre-compute the value before the template.`
5462
+ };
5463
+ }
5464
+ const truncated = Math.trunc(n);
5465
+ flatDepth = truncated < 0 ? 0 : truncated;
5466
+ }
5467
+ return { kind: "array-method", method: "flat", object: callee.object, args: [], flatDepth };
5468
+ }
5441
5469
  if (callee.property === "toLowerCase") {
5442
5470
  return { kind: "array-method", method: "toLowerCase", object: callee.object, args };
5443
5471
  }
@@ -5521,6 +5549,50 @@ function convertNode(node, raw) {
5521
5549
  ` + `(reverse the operands for descending order). ` + `Wrap the call in /* @client */ to evaluate at hydration.`
5522
5550
  };
5523
5551
  }
5552
+ if ((callee.property === "reduce" || callee.property === "reduceRight") && node.arguments.length === 2) {
5553
+ const reduceOp = extractReduceOpFromTS(node.arguments[0], node.arguments[1]);
5554
+ if (reduceOp) {
5555
+ return {
5556
+ kind: "array-method",
5557
+ method: callee.property,
5558
+ object: callee.object,
5559
+ args: [],
5560
+ reduceOp
5561
+ };
5562
+ }
5563
+ const m = callee.property;
5564
+ return {
5565
+ kind: "unsupported",
5566
+ raw,
5567
+ reason: `Reduce shape not supported. Accepted (arithmetic fold, explicit init):
5568
+ ` + ` arr.${m}((acc, x) => acc + x, 0)
5569
+ ` + ` arr.${m}((acc, x) => acc + x.field, 0)
5570
+ ` + ` arr.${m}((acc, x) => acc * x.field, 1)
5571
+ ` + ` arr.${m}((acc, x) => acc + x.field, '') (string concat)
5572
+ ` + `The accumulator must be the left operand and the initial ` + `value a number / string literal. ` + `Wrap the call in /* @client */ to evaluate at hydration.`
5573
+ };
5574
+ }
5575
+ if (callee.property === "flatMap") {
5576
+ const flatMapOp = node.arguments.length === 1 ? extractFlatMapOpFromTS(node.arguments[0]) : null;
5577
+ if (flatMapOp) {
5578
+ return {
5579
+ kind: "array-method",
5580
+ method: "flatMap",
5581
+ object: callee.object,
5582
+ args: [],
5583
+ flatMapOp
5584
+ };
5585
+ }
5586
+ return {
5587
+ kind: "unsupported",
5588
+ raw,
5589
+ reason: `flatMap shape not supported. Accepted (self / field leaves, no thisArg):
5590
+ ` + ` arr.flatMap(i => i) (flatten one level)
5591
+ ` + ` arr.flatMap(i => i.field) (flatten a per-item array field)
5592
+ ` + ` arr.flatMap(i => [i.a, i.b]) (gather per-item fields)
5593
+ ` + `Richer callbacks (computed / nested access, arithmetic, calls, ` + `literal elements) and the 2-arg \`flatMap(fn, thisArg)\` form ` + `aren't lowered. Wrap the call in /* @client */ to evaluate at hydration.`
5594
+ };
5595
+ }
5524
5596
  }
5525
5597
  return { kind: "call", callee, args };
5526
5598
  }
@@ -5839,6 +5911,119 @@ function classifySortOperand(expr, paramA, paramB) {
5839
5911
  }
5840
5912
  return null;
5841
5913
  }
5914
+ function extractReduceOpFromTS(reducerNode, initNode) {
5915
+ const init = classifyReduceInit(initNode);
5916
+ if (!init)
5917
+ return null;
5918
+ if (!ts8.isArrowFunction(reducerNode) && !ts8.isFunctionExpression(reducerNode))
5919
+ return null;
5920
+ if (reducerNode.parameters.length !== 2)
5921
+ return null;
5922
+ const pAcc = reducerNode.parameters[0];
5923
+ const pItem = reducerNode.parameters[1];
5924
+ if (!ts8.isIdentifier(pAcc.name) || !ts8.isIdentifier(pItem.name))
5925
+ return null;
5926
+ const paramAcc = pAcc.name.text;
5927
+ const paramItem = pItem.name.text;
5928
+ let body;
5929
+ if (ts8.isArrowFunction(reducerNode) && !ts8.isBlock(reducerNode.body)) {
5930
+ body = reducerNode.body;
5931
+ } else {
5932
+ const block = reducerNode.body;
5933
+ const stmts = block.statements;
5934
+ if (stmts.length !== 1 || !ts8.isReturnStatement(stmts[0]) || !stmts[0].expression)
5935
+ return null;
5936
+ body = stmts[0].expression;
5937
+ }
5938
+ const raw = body.getText();
5939
+ const expr = unwrapParens(body);
5940
+ if (!ts8.isBinaryExpression(expr))
5941
+ return null;
5942
+ let op;
5943
+ if (expr.operatorToken.kind === ts8.SyntaxKind.PlusToken)
5944
+ op = "+";
5945
+ else if (expr.operatorToken.kind === ts8.SyntaxKind.AsteriskToken)
5946
+ op = "*";
5947
+ else
5948
+ return null;
5949
+ const left = unwrapParens(expr.left);
5950
+ if (!ts8.isIdentifier(left) || left.text !== paramAcc)
5951
+ return null;
5952
+ const key = classifyReduceKey(unwrapParens(expr.right), paramItem);
5953
+ if (!key)
5954
+ return null;
5955
+ const type = init.type;
5956
+ if (type === "string" && op !== "+")
5957
+ return null;
5958
+ return { op, key, type, init: init.value, raw, paramAcc, paramItem };
5959
+ }
5960
+ function extractFlatMapOpFromTS(cbNode) {
5961
+ if (!ts8.isArrowFunction(cbNode) && !ts8.isFunctionExpression(cbNode))
5962
+ return null;
5963
+ if (cbNode.parameters.length !== 1)
5964
+ return null;
5965
+ const p = cbNode.parameters[0];
5966
+ if (!ts8.isIdentifier(p.name))
5967
+ return null;
5968
+ const param = p.name.text;
5969
+ let body;
5970
+ if (ts8.isArrowFunction(cbNode) && !ts8.isBlock(cbNode.body)) {
5971
+ body = cbNode.body;
5972
+ } else {
5973
+ const block = cbNode.body;
5974
+ const stmts = block.statements;
5975
+ if (stmts.length !== 1 || !ts8.isReturnStatement(stmts[0]) || !stmts[0].expression)
5976
+ return null;
5977
+ body = stmts[0].expression;
5978
+ }
5979
+ const raw = body.getText();
5980
+ const inner = unwrapParens(body);
5981
+ if (ts8.isArrayLiteralExpression(inner)) {
5982
+ if (inner.elements.length === 0)
5983
+ return null;
5984
+ const elements = [];
5985
+ for (const el of inner.elements) {
5986
+ if (ts8.isSpreadElement(el) || ts8.isOmittedExpression(el))
5987
+ return null;
5988
+ const leaf2 = classifyReduceKey(unwrapParens(el), param);
5989
+ if (!leaf2)
5990
+ return null;
5991
+ elements.push(leaf2);
5992
+ }
5993
+ return { projection: { kind: "tuple", elements }, param, raw };
5994
+ }
5995
+ const leaf = classifyReduceKey(inner, param);
5996
+ if (!leaf)
5997
+ return null;
5998
+ return { projection: leaf, param, raw };
5999
+ }
6000
+ function classifyReduceKey(expr, paramItem) {
6001
+ if (ts8.isIdentifier(expr)) {
6002
+ return expr.text === paramItem ? { kind: "self" } : null;
6003
+ }
6004
+ if (ts8.isPropertyAccessExpression(expr) && ts8.isIdentifier(expr.expression)) {
6005
+ if (expr.expression.text === paramItem)
6006
+ return { kind: "field", field: expr.name.text };
6007
+ }
6008
+ return null;
6009
+ }
6010
+ function classifyReduceInit(node) {
6011
+ let n = unwrapParens(node);
6012
+ if (ts8.isPrefixUnaryExpression(n) && n.operator === ts8.SyntaxKind.MinusToken) {
6013
+ if (ts8.isNumericLiteral(n.operand))
6014
+ return { type: "numeric", value: "-" + n.operand.text };
6015
+ return null;
6016
+ }
6017
+ if (ts8.isNumericLiteral(n))
6018
+ return { type: "numeric", value: n.text };
6019
+ if (ts8.isStringLiteral(n)) {
6020
+ const raw = n.getText();
6021
+ if (raw.length < 2 || raw.slice(1, -1) !== n.text)
6022
+ return null;
6023
+ return { type: "string", value: n.text };
6024
+ }
6025
+ return null;
6026
+ }
5842
6027
  function collectDestructureBindings(pattern, pathPrefix, fieldMap, raw, excludedTopKeys) {
5843
6028
  let restName;
5844
6029
  for (const el of pattern.elements) {
@@ -6147,6 +6332,15 @@ function substituteDestructuredFields(expr, fieldMap, syntheticParam, restName)
6147
6332
  if (e.method === "sort" || e.method === "toSorted") {
6148
6333
  return { kind: "array-method", method: e.method, object: walk(e.object), args: [], comparator: e.comparator };
6149
6334
  }
6335
+ if (e.method === "reduce" || e.method === "reduceRight") {
6336
+ return { kind: "array-method", method: e.method, object: walk(e.object), args: [], reduceOp: e.reduceOp };
6337
+ }
6338
+ if (e.method === "flat") {
6339
+ return { kind: "array-method", method: "flat", object: walk(e.object), args: [], flatDepth: e.flatDepth };
6340
+ }
6341
+ if (e.method === "flatMap") {
6342
+ return { kind: "array-method", method: "flatMap", object: walk(e.object), args: [], flatMapOp: e.flatMapOp };
6343
+ }
6150
6344
  return { kind: "array-method", method: e.method, object: walk(e.object), args: e.args.map(walk) };
6151
6345
  case "literal":
6152
6346
  case "unsupported":
@@ -6267,7 +6461,8 @@ function checkSupport(expr) {
6267
6461
  return {
6268
6462
  supported: false,
6269
6463
  level: "L5_UNSUPPORTED",
6270
- reason: `Method '${methodName}()' has no template lowering and requires client-side evaluation. Wrap the expression in /* @client */ to defer it to hydration, or pre-compute the value before rendering.`
6464
+ selfContained: true,
6465
+ reason: UNSUPPORTED_METHOD_REASONS[methodName] ?? `'${methodName}()' can't render on the server. Pre-compute the value, or add /* @client */ for client-only (no SSR).`
6271
6466
  };
6272
6467
  }
6273
6468
  }
@@ -6491,6 +6686,20 @@ function exprToString(expr) {
6491
6686
  const { paramA, paramB, raw } = expr.comparator;
6492
6687
  return `${exprToString(expr.object)}.${expr.method}((${paramA},${paramB}) => ${raw})`;
6493
6688
  }
6689
+ if (expr.method === "reduce" || expr.method === "reduceRight") {
6690
+ const { paramAcc, paramItem, raw, type, init } = expr.reduceOp;
6691
+ const initSrc = type === "string" ? JSON.stringify(init) : init;
6692
+ return `${exprToString(expr.object)}.${expr.method}((${paramAcc},${paramItem}) => ${raw}, ${initSrc})`;
6693
+ }
6694
+ if (expr.method === "flat") {
6695
+ const d = expr.flatDepth;
6696
+ const depthSrc = d === "infinity" ? "Infinity" : String(d);
6697
+ return `${exprToString(expr.object)}.flat(${d === 1 ? "" : depthSrc})`;
6698
+ }
6699
+ if (expr.method === "flatMap") {
6700
+ const { param, raw } = expr.flatMapOp;
6701
+ return `${exprToString(expr.object)}.flatMap(${param} => ${raw})`;
6702
+ }
6494
6703
  return `${exprToString(expr.object)}.${expr.method}(${expr.args.map(exprToString).join(", ")})`;
6495
6704
  case "unsupported":
6496
6705
  return `[UNSUPPORTED: ${expr.raw}]`;
@@ -6536,6 +6745,20 @@ function stringifyParsedExpr(expr) {
6536
6745
  const { paramA, paramB, raw } = expr.comparator;
6537
6746
  return `${stringifyParsedExpr(expr.object)}.${expr.method}((${paramA},${paramB}) => ${raw})`;
6538
6747
  }
6748
+ if (expr.method === "reduce" || expr.method === "reduceRight") {
6749
+ const { paramAcc, paramItem, raw, type, init } = expr.reduceOp;
6750
+ const initSrc = type === "string" ? JSON.stringify(init) : init;
6751
+ return `${stringifyParsedExpr(expr.object)}.${expr.method}((${paramAcc},${paramItem}) => ${raw}, ${initSrc})`;
6752
+ }
6753
+ if (expr.method === "flat") {
6754
+ const d = expr.flatDepth;
6755
+ const depthSrc = d === "infinity" ? "Infinity" : String(d);
6756
+ return `${stringifyParsedExpr(expr.object)}.flat(${d === 1 ? "" : depthSrc})`;
6757
+ }
6758
+ if (expr.method === "flatMap") {
6759
+ const { param, raw } = expr.flatMapOp;
6760
+ return `${stringifyParsedExpr(expr.object)}.flatMap(${param} => ${raw})`;
6761
+ }
6539
6762
  return `${stringifyParsedExpr(expr.object)}.${expr.method}(${expr.args.map(stringifyParsedExpr).join(", ")})`;
6540
6763
  case "unsupported":
6541
6764
  return expr.raw;
@@ -7361,6 +7584,7 @@ function transformComponentElement(node, ctx, name) {
7361
7584
  children,
7362
7585
  template: name.toLowerCase(),
7363
7586
  slotId,
7587
+ ...isDynamicTagLocal(name, ctx) ? { dynamicTag: true } : {},
7364
7588
  loc: getSourceLocation(node, ctx.sourceFile, ctx.filePath)
7365
7589
  };
7366
7590
  }
@@ -7376,6 +7600,7 @@ function transformSelfClosingComponent(node, ctx, name) {
7376
7600
  children: [],
7377
7601
  template: name.toLowerCase(),
7378
7602
  slotId,
7603
+ ...isDynamicTagLocal(name, ctx) ? { dynamicTag: true } : {},
7379
7604
  loc: getSourceLocation(node, ctx.sourceFile, ctx.filePath)
7380
7605
  };
7381
7606
  }
@@ -9068,6 +9293,40 @@ function findLocalConst(name, ctx) {
9068
9293
  const pool = fnScoped.length > 0 ? fnScoped : matches;
9069
9294
  return pool[pool.length - 1];
9070
9295
  }
9296
+ function isDynamicTagLocal(name, ctx) {
9297
+ if (!hasDynamicTagBinding(name, ctx.sourceFile))
9298
+ return false;
9299
+ const a = ctx.analyzer;
9300
+ if (a.jsxConstants?.has(name))
9301
+ return false;
9302
+ if (a.jsxFunctions?.has(name))
9303
+ return false;
9304
+ if (a.jsxMultiReturnFunctions?.has(name))
9305
+ return false;
9306
+ if (a.inlineableJsxConsts?.has(name))
9307
+ return false;
9308
+ return true;
9309
+ }
9310
+ function hasDynamicTagBinding(name, sourceFile) {
9311
+ let found = false;
9312
+ const visit2 = (node) => {
9313
+ if (found)
9314
+ return;
9315
+ if (ts11.isVariableDeclaration(node) && ts11.isIdentifier(node.name) && node.name.text === name && node.initializer) {
9316
+ let init = node.initializer;
9317
+ while (ts11.isAsExpression(init) || ts11.isSatisfiesExpression(init) || ts11.isParenthesizedExpression(init) || ts11.isNonNullExpression(init)) {
9318
+ init = init.expression;
9319
+ }
9320
+ if (ts11.isPropertyAccessExpression(init) && init.name.text === "tag") {
9321
+ found = true;
9322
+ return;
9323
+ }
9324
+ }
9325
+ ts11.forEachChild(node, visit2);
9326
+ };
9327
+ visit2(sourceFile);
9328
+ return found;
9329
+ }
9071
9330
  function tryResolveIdentifierAsTemplateLiteral(ident, ctx) {
9072
9331
  const constInfo = findLocalConst(ident.text, ctx);
9073
9332
  if (!constInfo)
@@ -10072,7 +10331,7 @@ function collectInnerLoops(nodes, siblingOffsets, outerLoopParam, ctx, options)
10072
10331
  }
10073
10332
  function decideLoopRendering(loop, siblingOffsets, ctx) {
10074
10333
  const hasNestedComps = (loop.nestedComponents?.length ?? 0) > 0;
10075
- const innerLoops = !loop.childComponent ? collectInnerLoops(loop.children, siblingOffsets, loop.param, ctx) : undefined;
10334
+ const innerLoops = collectInnerLoops(loop.children, siblingOffsets, loop.param, ctx);
10076
10335
  const hasInnerLoops = (innerLoops?.length ?? 0) > 0;
10077
10336
  const useElementReconciliation = !loop.childComponent && !loop.isStaticArray && (hasNestedComps || hasInnerLoops);
10078
10337
  return { useElementReconciliation, innerLoops };
@@ -10356,7 +10615,9 @@ function collectFromElement(element, ctx, insideConditional = false) {
10356
10615
  const elemRestName = ctx.restPropsName;
10357
10616
  const elemPropsObjName = ctx.propsObjectName;
10358
10617
  if (spreadVal && (spreadVal === elemRestName || spreadVal === elemPropsObjName)) {
10359
- const excludeKeys = element.attrs.filter((a) => a.name !== "...").map((a) => a.name);
10618
+ const consumedKeys = spreadVal === elemRestName ? ctx.propsParams.map((p) => p.name) : [];
10619
+ const staticAttrKeys = element.attrs.filter((a) => a.name !== "...").map((a) => a.name);
10620
+ const excludeKeys = [...new Set([...consumedKeys, ...staticAttrKeys])];
10360
10621
  ctx.restAttrElements.push({
10361
10622
  slotId: element.slotId,
10362
10623
  source: PROPS_PARAM,
@@ -12888,7 +13149,7 @@ function buildStaticArrayChildInitsPlan(ctx) {
12888
13149
  const innerComps = elem.nestedComponents.filter((c) => (c.loopDepth ?? 0) === innerLoop.depth && c.innerLoopArray === innerLoop.array);
12889
13150
  if (innerComps.length === 0)
12890
13151
  continue;
12891
- plans.push(buildInnerLoopNestedPlan(elem, innerLoop, innerComps));
13152
+ plans.push(elem.childComponent ? buildComponentRootedInnerLoopPlan(elem, innerLoop, innerComps) : buildInnerLoopNestedPlan(elem, innerLoop, innerComps));
12892
13153
  }
12893
13154
  }
12894
13155
  }
@@ -12949,6 +13210,25 @@ function buildInnerLoopNestedPlan(elem, innerLoop, innerComps) {
12949
13210
  comps
12950
13211
  };
12951
13212
  }
13213
+ function buildComponentRootedInnerLoopPlan(elem, innerLoop, innerComps) {
13214
+ const comps = innerComps.map((comp) => ({
13215
+ componentName: comp.name,
13216
+ selector: buildCompSelector(comp),
13217
+ propsExpr: buildStaticPropsExpr(comp.props)
13218
+ }));
13219
+ return {
13220
+ kind: "component-rooted-inner-loop",
13221
+ containerVar: `_${varSlotId(elem.slotId)}`,
13222
+ outerArrayExpr: elem.array,
13223
+ outerParam: elem.param,
13224
+ outerPreludeStatements: elem.mapPreamble ? [elem.mapPreamble] : [],
13225
+ innerArrayExpr: innerLoop.array,
13226
+ innerParam: innerLoop.param,
13227
+ innerPreludeStatements: innerLoop.mapPreamble ? [innerLoop.mapPreamble] : [],
13228
+ depth: innerLoop.depth,
13229
+ comps
13230
+ };
13231
+ }
12952
13232
  function buildStaticPropsExpr(props) {
12953
13233
  const entries = props.map((p) => {
12954
13234
  if (p.isEventHandler) {
@@ -12988,6 +13268,9 @@ function stringifyOne(lines, plan) {
12988
13268
  case "inner-loop-nested":
12989
13269
  emitInnerLoopNested(lines, plan);
12990
13270
  break;
13271
+ case "component-rooted-inner-loop":
13272
+ emitComponentRootedInnerLoop(lines, plan);
13273
+ break;
12991
13274
  }
12992
13275
  }
12993
13276
  function emitSingleComp(lines, plan) {
@@ -13067,6 +13350,44 @@ function emitInnerLoopNested(lines, plan) {
13067
13350
  lines.push(` }`);
13068
13351
  lines.push("");
13069
13352
  }
13353
+ function emitComponentRootedInnerLoop(lines, plan) {
13354
+ const {
13355
+ containerVar,
13356
+ outerArrayExpr,
13357
+ outerParam,
13358
+ outerPreludeStatements,
13359
+ innerArrayExpr,
13360
+ innerParam,
13361
+ innerPreludeStatements,
13362
+ depth,
13363
+ comps
13364
+ } = plan;
13365
+ const scopesVar = (i) => comps.length > 1 ? `__compScopes${i}` : "__compScopes";
13366
+ const cursorVar = (i) => comps.length > 1 ? `__ci${i}` : "__ci";
13367
+ const compElVar = (i) => comps.length > 1 ? `__compEl${i}` : "__compEl";
13368
+ lines.push(` // Initialize component-rooted inner-loop components (depth ${depth})`);
13369
+ lines.push(` if (${containerVar}) {`);
13370
+ comps.forEach((comp, i) => {
13371
+ lines.push(` const ${scopesVar(i)} = qsaChildScopes(${containerVar}, ${comp.selector})`);
13372
+ lines.push(` let ${cursorVar(i)} = 0`);
13373
+ });
13374
+ lines.push(` ${outerArrayExpr}.forEach((${outerParam}) => {`);
13375
+ for (const stmt of outerPreludeStatements) {
13376
+ lines.push(` ${stmt}`);
13377
+ }
13378
+ lines.push(` ${innerArrayExpr}.forEach((${innerParam}) => {`);
13379
+ for (const stmt of innerPreludeStatements) {
13380
+ lines.push(` ${stmt}`);
13381
+ }
13382
+ comps.forEach((comp, i) => {
13383
+ lines.push(` const ${compElVar(i)} = ${scopesVar(i)}[${cursorVar(i)}++]`);
13384
+ lines.push(` if (${compElVar(i)}) initChild('${nameForRegistryRef(comp.componentName)}', ${compElVar(i)}, ${comp.propsExpr})`);
13385
+ });
13386
+ lines.push(` })`);
13387
+ lines.push(` })`);
13388
+ lines.push(` }`);
13389
+ lines.push("");
13390
+ }
13070
13391
 
13071
13392
  // src/ir-to-client-js/phases/static-array-child-inits.ts
13072
13393
  function emitStaticArrayChildInits(lines, ctx) {
@@ -17345,6 +17666,15 @@ function emitParsedExpr(expr, emitter) {
17345
17666
  if (expr.method === "sort" || expr.method === "toSorted") {
17346
17667
  return emitter.sortMethod(expr.method, expr.object, expr.comparator, emit);
17347
17668
  }
17669
+ if (expr.method === "reduce" || expr.method === "reduceRight") {
17670
+ return emitter.reduceMethod(expr.method, expr.object, expr.reduceOp, emit);
17671
+ }
17672
+ if (expr.method === "flat") {
17673
+ return emitter.flatMethod(expr.object, expr.flatDepth, emit);
17674
+ }
17675
+ if (expr.method === "flatMap") {
17676
+ return emitter.flatMapMethod(expr.object, expr.flatMapOp, emit);
17677
+ }
17348
17678
  return emitter.arrayMethod(expr.method, expr.object, expr.args, emit);
17349
17679
  case "unsupported":
17350
17680
  return emitter.unsupported(expr.raw, expr.reason);
@@ -1 +1 @@
1
- {"version":3,"file":"collect-elements.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/collect-elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAoC,KAAK,MAAM,EAAmC,MAAM,UAAU,CAAA;AACtH,OAAO,KAAK,EAAE,eAAe,EAA+H,iBAAiB,EAA0B,oBAAoB,EAAc,UAAU,EAAE,MAAM,SAAS,CAAA;AAwGpQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0C7E;AAyBD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,wBAIpC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,cAAc,CAAC,EAAE,MAAM,EACvB,GAAG,CAAC,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,UAAU,EAAE,CAyId;AA+JD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,iBAAiB,UAAQ,GACxB,IAAI,CAsON;AA6VD;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,SAAS,OAAO,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAC5E,iBAAiB,CAUnB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,SAAS,CAAC,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,SAAS,OAAO,UAAU,EAAE,gBAAgB,EAAE,GACjE,oBAAoB,EAAE,CA4DxB"}
1
+ {"version":3,"file":"collect-elements.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/collect-elements.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAoC,KAAK,MAAM,EAAmC,MAAM,UAAU,CAAA;AACtH,OAAO,KAAK,EAAE,eAAe,EAA+H,iBAAiB,EAA0B,oBAAoB,EAAc,UAAU,EAAE,MAAM,SAAS,CAAA;AAwGpQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA0C7E;AAyBD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,wBAIpC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,cAAc,CAAC,EAAE,MAAM,EACvB,GAAG,CAAC,EAAE,eAAe,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,UAAU,EAAE,CAyId;AAqKD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,iBAAiB,UAAQ,GACxB,IAAI,CAsON;AA8WD;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,SAAS,OAAO,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAC5E,iBAAiB,CAUnB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,SAAS,CAAC,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,SAAS,OAAO,UAAU,EAAE,gBAAgB,EAAE,GACjE,oBAAoB,EAAE,CA4DxB"}
@@ -8,6 +8,10 @@
8
8
  * 2. `outer-nested` for each depth-0 entry in `elem.nestedComponents`.
9
9
  * 3. `inner-loop-nested` for each `elem.innerLoops` entry that has
10
10
  * matching depth-N components.
11
+ * 4. `component-rooted-inner-loop` instead of (3) when the outer item is
12
+ * itself a child component (#1725) — the inner `.map()` lives inside
13
+ * the component's JSX children, so it's addressed by a document-order
14
+ * zip rather than element offsets.
11
15
  *
12
16
  * Selector / propsExpr / offset decisions all resolve here. The
13
17
  * stringifier never inspects raw IR.
@@ -1 +1 @@
1
- {"version":3,"file":"build-static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/plan/build-static-array-child-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAO/C,OAAO,KAAK,EAOV,yBAAyB,EAC1B,MAAM,2BAA2B,CAAA;AAElC,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,eAAe,GACnB,yBAAyB,CA6B3B"}
1
+ {"version":3,"file":"build-static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/plan/build-static-array-child-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAO/C,OAAO,KAAK,EAQV,yBAAyB,EAC1B,MAAM,2BAA2B,CAAA;AAElC,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,eAAe,GACnB,yBAAyB,CAsC3B"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Plan types for `emitStaticArrayChildInits` — the three shapes that
2
+ * Plan types for `emitStaticArrayChildInits` — the shapes that
3
3
  * `static array` loops emit for child component initialisation:
4
4
  *
5
5
  * - `single-comp` — `loop.childComponent` ケース。一つの child component
@@ -8,6 +8,13 @@
8
8
  * `__iterEl.querySelector(...)` 経由で initChild。
9
9
  * - `inner-loop-nested` — depth > 0 の `nestedComponents`。outer + inner
10
10
  * forEach の二重ループで initChild。
11
+ * - `component-rooted-inner-loop`
12
+ * — outer の loop item root が **child component**
13
+ * (`loop.childComponent`) で、その JSX children に
14
+ * component の nested `.map()` を持つケース (#1725)。
15
+ * element offset では fragment-root passthrough の
16
+ * flatten 済み items に届かないため、document order
17
+ * の zip (`qsaChildScopes` + cursor) で initChild。
11
18
  *
12
19
  * All decisions (selector, propsExpr, offset expressions) are resolved at
13
20
  * build time so the stringifier becomes a deterministic walk.
@@ -122,6 +129,43 @@ export interface InnerLoopNestedInitPlan {
122
129
  /** Per-component initialisers emitted inside the inner forEach body. */
123
130
  comps: readonly InnerLoopComp[];
124
131
  }
125
- export type StaticArrayChildInitPlan = SingleCompInitPlan | OuterNestedInitPlan | InnerLoopNestedInitPlan;
132
+ /**
133
+ * Plan for an inner `.map()` of components living inside a **component-rooted**
134
+ * outer loop item (#1725). The outer loop body is a single child component
135
+ * (`loop.childComponent`, e.g. a `SelectGroup` passthrough) whose JSX
136
+ * `children` contain a nested `.map()` of components (e.g. `SelectItem`).
137
+ *
138
+ * `inner-loop-nested` can't be reused here: it addresses inner components via
139
+ * `containerVar.children[outerOffset]`, which assumes the outer loop item is a
140
+ * DOM **element**. A fragment-rooted passthrough component (`<>{children}</>`)
141
+ * emits no wrapper element, so its rendered items are flattened directly under
142
+ * the parent container with no per-group element to index.
143
+ *
144
+ * Instead this shape zips the inner component scopes — found in document order
145
+ * via `qsaChildScopes(container, <selector>)` — against the flattened
146
+ * `outer.forEach(o => inner.forEach(i => ...))` iteration. Document order is
147
+ * the SSR render order, so position `__ci++` pairs each scope with its data
148
+ * item regardless of whether the outer component root is an element or a
149
+ * fragment.
150
+ */
151
+ export interface ComponentRootedInnerLoopInitPlan {
152
+ kind: 'component-rooted-inner-loop';
153
+ containerVar: string;
154
+ /** Outer loop's array expression. */
155
+ outerArrayExpr: string;
156
+ outerParam: string;
157
+ /** Outer `.map()` callback preamble locals (#1064). */
158
+ outerPreludeStatements: PreludeStatements;
159
+ /** Inner loop's array expression (references the outer param). */
160
+ innerArrayExpr: string;
161
+ innerParam: string;
162
+ /** Inner `.map()` callback preamble locals (#1064). */
163
+ innerPreludeStatements: PreludeStatements;
164
+ /** Depth used in the leading comment line. */
165
+ depth: number;
166
+ /** Per-component initialisers emitted inside the inner forEach body. */
167
+ comps: readonly InnerLoopComp[];
168
+ }
169
+ export type StaticArrayChildInitPlan = SingleCompInitPlan | OuterNestedInitPlan | InnerLoopNestedInitPlan | ComponentRootedInnerLoopInitPlan;
126
170
  export type StaticArrayChildInitsPlan = readonly StaticArrayChildInitPlan[];
127
171
  //# sourceMappingURL=static-array-child-init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/plan/static-array-child-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAExE,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAA;IACnB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,sBAAsB,EAAE,iBAAiB,CAAA;IACzC,iEAAiE;IACjE,SAAS,EAAE,SAAS,CAAA;CACrB;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,+FAA+F;IAC/F,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,sBAAsB,EAAE,iBAAiB,CAAA;IACzC,SAAS,EAAE,SAAS,CAAA;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,sBAAsB,EAAE,iBAAiB,CAAA;IACzC;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,sBAAsB,EAAE,iBAAiB,CAAA;IACzC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;CAChC;AAED,MAAM,MAAM,wBAAwB,GAChC,kBAAkB,GAClB,mBAAmB,GACnB,uBAAuB,CAAA;AAE3B,MAAM,MAAM,yBAAyB,GAAG,SAAS,wBAAwB,EAAE,CAAA"}
1
+ {"version":3,"file":"static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/plan/static-array-child-init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/stringify/static-array-child-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAKV,yBAAyB,EAC1B,MAAM,iCAAiC,CAAA;AAGxC,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,yBAAyB,GAC/B,IAAI,CAIN"}
1
+ {"version":3,"file":"static-array-child-init.d.ts","sourceRoot":"","sources":["../../../src/ir-to-client-js/stringify/static-array-child-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAMV,yBAAyB,EAC1B,MAAM,iCAAiC,CAAA;AAGxC,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,yBAAyB,GAC/B,IAAI,CAIN"}
@@ -496,7 +496,14 @@ export interface RestAttrElement {
496
496
  slotId: string;
497
497
  /** The spread source expression (e.g., 'rest', 'props') */
498
498
  source: string;
499
- /** Attribute names already statically set on the element (exclude from applyRestAttrs) */
499
+ /**
500
+ * Prop SOURCE KEYS already consumed by the component (exclude from
501
+ * applyRestAttrs). For the destructured `...rest` form this is the
502
+ * destructured param names (the JS rest-exclusion set) unioned with any
503
+ * statically-set attr names; applyRestAttrs filters `source[key]` by these
504
+ * so it neither re-binds separately-wired events nor re-emits consumed
505
+ * props under their raw key. See collect-elements.ts for the rationale.
506
+ */
500
507
  excludeKeys: string[];
501
508
  }
502
509
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/types.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -528,6 +528,15 @@ export interface IRComponent {
528
528
  children: IRNode[];
529
529
  template: string;
530
530
  slotId: string | null;
531
+ /**
532
+ * True when `name` is a dynamic-tag local (`const Tag = children.tag`)
533
+ * rather than a real component reference. Such a "component" has no
534
+ * registrable template — it is a runtime-chosen tag. Consumed ONLY by
535
+ * the Go template adapter, which lowers it to a children passthrough so
536
+ * the dead branch registers cleanly (Hono/CSR/Mojo ignore this flag).
537
+ * Omitted (undefined) for ordinary components to keep IR diffs minimal.
538
+ */
539
+ dynamicTag?: boolean;
531
540
  loc: SourceLocation;
532
541
  }
533
542
  export interface IRSlot {