@barefootjs/jsx 0.31.8 → 0.31.10

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 (43) hide show
  1. package/dist/analyzer.d.ts.map +1 -1
  2. package/dist/expression-parser.d.ts +20 -0
  3. package/dist/expression-parser.d.ts.map +1 -1
  4. package/dist/index.js +226 -66
  5. package/dist/ir-to-client-js/collect-elements.d.ts.map +1 -1
  6. package/dist/ir-to-client-js/control-flow/stringify/loop-child-arm.d.ts.map +1 -1
  7. package/dist/ir-to-client-js/control-flow/stringify/loop.d.ts.map +1 -1
  8. package/dist/ir-to-client-js/control-flow/stringify/template-parse.d.ts +66 -38
  9. package/dist/ir-to-client-js/control-flow/stringify/template-parse.d.ts.map +1 -1
  10. package/dist/ir-to-client-js/emit-registration.d.ts.map +1 -1
  11. package/dist/ir-to-client-js/html-template.d.ts +15 -1
  12. package/dist/ir-to-client-js/html-template.d.ts.map +1 -1
  13. package/dist/ir-to-client-js/imports.d.ts +2 -2
  14. package/dist/ir-to-client-js/imports.d.ts.map +1 -1
  15. package/dist/ssr-defaults.d.ts +10 -0
  16. package/dist/ssr-defaults.d.ts.map +1 -1
  17. package/dist/ssr-seed-plan.d.ts.map +1 -1
  18. package/package.json +2 -2
  19. package/src/__tests__/__snapshots__/doc-examples.test.ts.snap +210 -210
  20. package/src/__tests__/aliased-destructured-prop-csr.test.ts +8 -2
  21. package/src/__tests__/csr-template-loop-shadowing.test.ts +5 -2
  22. package/src/__tests__/date-lowering.test.ts +1 -1
  23. package/src/__tests__/env-signal-template-prelude.test.ts +4 -2
  24. package/src/__tests__/inner-loop-mathml-namespace.test.ts +135 -0
  25. package/src/__tests__/markup-prop-brand.test.ts +161 -0
  26. package/src/__tests__/mathml-mapArray-namespace.test.ts +230 -0
  27. package/src/__tests__/props-destructuring.test.ts +40 -3
  28. package/src/__tests__/ssr-defaults.test.ts +230 -0
  29. package/src/__tests__/ssr-seed-plan.test.ts +72 -0
  30. package/src/__tests__/text-slot-escaping.test.ts +21 -12
  31. package/src/analyzer.ts +83 -26
  32. package/src/expression-parser.ts +10 -1
  33. package/src/ir-to-client-js/collect-elements.ts +38 -5
  34. package/src/ir-to-client-js/control-flow/stringify/inner-loop.ts +10 -10
  35. package/src/ir-to-client-js/control-flow/stringify/loop-child-arm.ts +3 -4
  36. package/src/ir-to-client-js/control-flow/stringify/loop.ts +18 -14
  37. package/src/ir-to-client-js/control-flow/stringify/template-parse.ts +142 -78
  38. package/src/ir-to-client-js/emit-registration.ts +5 -1
  39. package/src/ir-to-client-js/html-template.ts +103 -12
  40. package/src/ir-to-client-js/imports.ts +4 -0
  41. package/src/ir-to-client-js/index.ts +6 -1
  42. package/src/ssr-defaults.ts +171 -6
  43. package/src/ssr-seed-plan.ts +82 -2
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAInE,OAAO,EACL,KAAK,eAAe,EAUrB,MAAM,uBAAuB,CAAA;AAqB9B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EACpB,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,eAAe,CAAC,EAAE,OAAO,GACxB,eAAe,CAkKjB;AAuhBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAavE;AAuuCD,MAAM,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,qBAAqB,GAAG,EAAE,CAAC,WAAW,CAAA;AAErF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,EAAE,CAAC,UAAU,CAAA;QACxB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAA;QAC/B;;;;;WAKG;QACH,mBAAmB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAA;KACtC,CAAC,CAAA;IACF,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAA;CAClC;AAuBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,EAAE,CAAC,KAAK,EACd,aAAa,UAAQ,GACpB,sBAAsB,GAAG,IAAI,CA+J/B;AAsGD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CA6BpE;AA2LD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAuCzE;AAuDD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAelE;AA6tCD,eAAO,MAAM,wBAAwB,aAOnC,CAAA;AAqBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0DV;AAcD,eAAO,MAAM,mBAAmB,aAG9B,CAAA;AA25CF;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CA4EvE;AAiID,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAG3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAInE,OAAO,EACL,KAAK,eAAe,EAUrB,MAAM,uBAAuB,CAAA;AAqB9B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/D;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAA;CAAE,GAAG,IAAI,CA8CpF;AAMD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EACpB,mBAAmB,CAAC,EAAE,oBAAoB,EAC1C,eAAe,CAAC,EAAE,OAAO,GACxB,eAAe,CAkKjB;AAuhBD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAavE;AAuuCD,MAAM,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,qBAAqB,GAAG,EAAE,CAAC,WAAW,CAAA;AAErF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC;QACd,SAAS,EAAE,EAAE,CAAC,UAAU,CAAA;QACxB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAA;QAC/B;;;;;WAKG;QACH,mBAAmB,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,CAAA;KACtC,CAAC,CAAA;IACF,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAA;CAClC;AAuBD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,EAAE,CAAC,KAAK,EACd,aAAa,UAAQ,GACpB,sBAAsB,GAAG,IAAI,CA+J/B;AAsGD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CA6BpE;AA2LD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAuCzE;AAuDD;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAelE;AAsxCD,eAAO,MAAM,wBAAwB,aAOnC,CAAA;AAqBF;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CA0DV;AAcD,eAAO,MAAM,mBAAmB,aAG9B,CAAA;AA25CF;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CA4EvE;AAiID,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
@@ -426,6 +426,26 @@ export interface FoldBlockOptions {
426
426
  */
427
427
  pureCallNames?: ReadonlySet<string>;
428
428
  }
429
+ /**
430
+ * Inline `name → value` everywhere it appears free in `expr` (the let-inline
431
+ * step). Returns `null` if the substitution would capture a free variable of
432
+ * `value` under a nested callback parameter of the same name — that shape is
433
+ * unsound to inline non-hygienically, so the caller refuses with
434
+ * {@link CAPTURE_BLOCK_REASON}. A nested arrow parameter that shadows `name`
435
+ * leaves that inner reference untouched (it is the parameter, not the binding).
436
+ * Mirrors the structural walk of `substituteDestructuredFields`; every
437
+ * `ParsedExpr` kind is handled so a new kind surfaces as a compile error here.
438
+ *
439
+ * Exported for `computeSsrSeedPlan` (`ssr-seed-plan.ts`), which reuses this
440
+ * SAME let-inline step to resolve a signal/memo initializer through
441
+ * component-scope `const` locals sitting between it and the prop it reads
442
+ * (`const mid = props.label; createSignal(mid ?? 'Default')`) — the
443
+ * structural (never string-splicing) analogue of what `foldBlockToExpr`
444
+ * already does for a block-bodied memo's own internal `const`s, and of what
445
+ * the CSR client-JS emitter's `csrSubstitute` does over TS source text for
446
+ * the compiled JS domain (#2685 review).
447
+ */
448
+ export declare function inlineBinding(expr: ParsedExpr, name: string, value: ParsedExpr): ParsedExpr | null;
429
449
  /**
430
450
  * Fold a value-producing block body — a {@link ParsedStatement} sequence of
431
451
  * `const` bindings, value-producing `if` / early `return`, and a terminal
@@ -1 +1 @@
1
- {"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../src/expression-parser.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3351,8 +3351,8 @@ function templateAttrExpr(attrName, valExpr, presenceOrUndefined) {
3351
3351
  function escapeAttrValueExpr(valExpr) {
3352
3352
  return `escapeAttr(${valExpr})`;
3353
3353
  }
3354
- function escapeTextSlotExpr(innerExpr) {
3355
- return `escapeText(${innerExpr})`;
3354
+ function escapeTextSlotExpr(innerExpr, isMarkup = false) {
3355
+ return `${isMarkup ? "escapeTextOrMarkup" : "escapeText"}(${innerExpr})`;
3356
3356
  }
3357
3357
  function dangerouslyHtmlChildren(attrs, toExpr) {
3358
3358
  const attr = attrs.find((a) => a.name === "dangerouslySetInnerHTML");
@@ -3629,7 +3629,7 @@ function irToHtmlTemplate(node, restSpreadNames, loopDepth = 0, loopParams, bran
3629
3629
  case "jsx-children": {
3630
3630
  const hoistedRecurse = (n) => irToHtmlTemplate(n, restSpreadNames, loopDepth, loopParams, branchSlotsVar, true);
3631
3631
  const childHtml = p.value.children.map((c) => hoistedRecurse(c)).join("");
3632
- return `${quotePropName(p.name)}: \`${childHtml}\``;
3632
+ return p.name === "children" ? `${quotePropName(p.name)}: \`${childHtml}\`` : `${quotePropName(p.name)}: bfMarkup(\`${childHtml}\`)`;
3633
3633
  }
3634
3634
  case "literal":
3635
3635
  return `${quotePropName(p.name)}: ${JSON.stringify(p.value.value)}`;
@@ -3988,6 +3988,9 @@ function irChildrenToJsExpr(children) {
3988
3988
  return exprs[0];
3989
3989
  return `[${exprs.join(", ")}]`;
3990
3990
  }
3991
+ function isSingleElementJsxChildren(nodes) {
3992
+ return nodes.length === 1 && nodes[0].type === "element";
3993
+ }
3991
3994
  function irNodeToJsExprs(node) {
3992
3995
  switch (node.type) {
3993
3996
  case "component": {
@@ -3996,8 +3999,11 @@ function irNodeToJsExprs(node) {
3996
3999
  return `${quotePropName(p.name)}: ${attrValueToString(p.value) ?? "undefined"}`;
3997
4000
  }
3998
4001
  switch (p.value.kind) {
3999
- case "jsx-children":
4000
- return `get ${quotePropName(p.name)}() { return ${irChildrenToJsExpr(p.value.children)} }`;
4002
+ case "jsx-children": {
4003
+ const jsxExpr = irChildrenToJsExpr(p.value.children);
4004
+ const wrapped = p.name !== "children" && isSingleElementJsxChildren(p.value.children) ? `bfMarkup(${jsxExpr})` : jsxExpr;
4005
+ return `get ${quotePropName(p.name)}() { return ${wrapped} }`;
4006
+ }
4001
4007
  case "literal":
4002
4008
  return `get ${quotePropName(p.name)}() { return ${JSON.stringify(p.value.value)} }`;
4003
4009
  case "boolean-shorthand":
@@ -4056,8 +4062,8 @@ function isSingleRootElement(html) {
4056
4062
  const closingPattern = new RegExp(`</${tag}>\\s*$`);
4057
4063
  return closingPattern.test(html.trim());
4058
4064
  }
4059
- function irToComponentTemplate(node, inlinableConstants, restSpreadNames, propsObjectName) {
4060
- return irToComponentTemplateWithOpts(node, { inlinableConstants, restSpreadNames, propsObjectName, loopDepth: -1 });
4065
+ function irToComponentTemplate(node, inlinableConstants, restSpreadNames, propsObjectName, markupSlotIds) {
4066
+ return irToComponentTemplateWithOpts(node, { inlinableConstants, restSpreadNames, propsObjectName, loopDepth: -1, markupSlotIds });
4061
4067
  }
4062
4068
  function irToComponentTemplateWithOpts(node, opts) {
4063
4069
  const { inlinableConstants, restSpreadNames, propsObjectName, loopDepth = 0 } = opts;
@@ -4162,7 +4168,8 @@ function irToComponentTemplateWithOpts(node, opts) {
4162
4168
  const wrapped = transformExpr(node.expr, node.templateExpr);
4163
4169
  const value = node.joinArrayChild ? `Array.isArray(${wrapped}) ? ${wrapped}.join('') : (${wrapped} ?? '')` : wrapped;
4164
4170
  if (node.slotId) {
4165
- return `<!--bf:${node.slotId}-->\${${node.joinArrayChild ? value : escapeTextSlotExpr(wrapped)}}<!--/-->`;
4171
+ const isMarkup = opts.markupSlotIds?.has(node.slotId) ?? false;
4172
+ return `<!--bf:${node.slotId}-->\${${node.joinArrayChild ? value : escapeTextSlotExpr(wrapped, isMarkup)}}<!--/-->`;
4166
4173
  }
4167
4174
  return `\${${value}}`;
4168
4175
  }
@@ -4189,7 +4196,7 @@ function irToComponentTemplateWithOpts(node, opts) {
4189
4196
  case "jsx-children": {
4190
4197
  const hoistedRecurse = (n) => irToComponentTemplateWithOpts(n, { ...opts, inHoistedChildren: true });
4191
4198
  const childHtml = p.value.children.map((c) => hoistedRecurse(c)).join("");
4192
- return `${quotePropName(p.name)}: \`${childHtml}\``;
4199
+ return p.name === "children" ? `${quotePropName(p.name)}: \`${childHtml}\`` : `${quotePropName(p.name)}: bfMarkup(\`${childHtml}\`)`;
4193
4200
  }
4194
4201
  case "literal":
4195
4202
  return `${quotePropName(p.name)}: ${JSON.stringify(p.value.value)}`;
@@ -4310,7 +4317,8 @@ function generateCsrTemplate(node, inlinableConstants, ctx, restSpreadNames, pro
4310
4317
  }
4311
4318
  }
4312
4319
  const effectiveUnsafeLocalNames = mergeCsrNullUnsafe(ctx, unsafeLocalNames);
4313
- return generateCsrTemplateWithOpts(node, { inlinableConstants, restSpreadNames, propsObjectName, csrEnv, unsafeLocalNames: effectiveUnsafeLocalNames, deferredChildSlots, loopDepth: -1 });
4320
+ const markupSlotIds = new Set(ctx.dynamicElements.map((e) => e.slotId));
4321
+ return generateCsrTemplateWithOpts(node, { inlinableConstants, restSpreadNames, propsObjectName, csrEnv, unsafeLocalNames: effectiveUnsafeLocalNames, deferredChildSlots, loopDepth: -1, markupSlotIds });
4314
4322
  }
4315
4323
  function mergeCsrNullUnsafe(ctx, unsafeLocalNames) {
4316
4324
  let merged = null;
@@ -4491,7 +4499,8 @@ function generateCsrTemplateWithOpts(node, opts) {
4491
4499
  const expr = transformed === UNSAFE_TEMPLATE_EXPR ? "''" : transformed;
4492
4500
  const value = node.joinArrayChild ? `Array.isArray(${expr}) ? ${expr}.join('') : (${expr} ?? '')` : expr;
4493
4501
  if (node.slotId) {
4494
- return `<!--bf:${node.slotId}-->\${${node.joinArrayChild ? value : escapeTextSlotExpr(expr)}}<!--/-->`;
4502
+ const isMarkup = opts.markupSlotIds?.has(node.slotId) ?? false;
4503
+ return `<!--bf:${node.slotId}-->\${${node.joinArrayChild ? value : escapeTextSlotExpr(expr, isMarkup)}}<!--/-->`;
4495
4504
  }
4496
4505
  return `\${${value}}`;
4497
4506
  }
@@ -4521,7 +4530,7 @@ function generateCsrTemplateWithOpts(node, opts) {
4521
4530
  case "jsx-children": {
4522
4531
  const hoistedRecurse = (n) => generateCsrTemplateWithOpts(n, { ...opts, inHoistedChildren: true });
4523
4532
  const childHtml = p.value.children.map((c) => hoistedRecurse(c)).join("");
4524
- return `${quotePropName(p.name)}: \`${childHtml}\``;
4533
+ return p.name === "children" ? `${quotePropName(p.name)}: \`${childHtml}\`` : `${quotePropName(p.name)}: bfMarkup(\`${childHtml}\`)`;
4525
4534
  }
4526
4535
  case "literal":
4527
4536
  return `${quotePropName(p.name)}: ${JSON.stringify(p.value.value)}`;
@@ -7840,15 +7849,28 @@ function collectKeysFromMembers(members, ctx) {
7840
7849
  }
7841
7850
  return keys;
7842
7851
  }
7852
+ function isResolvableMemberType(info) {
7853
+ switch (info.kind) {
7854
+ case "primitive":
7855
+ return info.primitive === "string" || info.primitive === "number" || info.primitive === "boolean";
7856
+ case "interface":
7857
+ return CATALOGUED_RICH_TYPE_NAMES.has(baseTypeName(info.raw));
7858
+ case "array":
7859
+ return !!info.elementType && isResolvableMemberType(info.elementType);
7860
+ case "object":
7861
+ return info.properties !== undefined && info.properties.every((prop) => isResolvableMemberType(prop.type));
7862
+ default:
7863
+ return false;
7864
+ }
7865
+ }
7843
7866
  function collectMemberTypes(typeNode, ctx) {
7844
- const isResolvablePrimitive = (info) => info.kind === "primitive" && (info.primitive === "string" || info.primitive === "number" || info.primitive === "boolean") || info.kind === "interface" && CATALOGUED_RICH_TYPE_NAMES.has(baseTypeName(info.raw));
7845
7867
  const fromMembers = (members) => {
7846
7868
  const map = new Map;
7847
7869
  for (const member of members) {
7848
7870
  if (ts9.isPropertySignature(member) && member.name) {
7849
7871
  const info = member.type ? typeNodeToTypeInfo(member.type, ctx.sourceFile) : null;
7850
7872
  map.set(member.name.getText(ctx.sourceFile), {
7851
- type: info && isResolvablePrimitive(info) ? info : null,
7873
+ type: info && isResolvableMemberType(info) ? info : null,
7852
7874
  optional: !!member.questionToken
7853
7875
  });
7854
7876
  }
@@ -14585,25 +14607,85 @@ var SVG_ROOT_TAGS = new Set([
14585
14607
  "animateTransform",
14586
14608
  "animateMotion"
14587
14609
  ]);
14588
- function templateRootIsSvg(template) {
14610
+ var MATHML_ROOT_TAGS = new Set([
14611
+ "math",
14612
+ "mrow",
14613
+ "mfrac",
14614
+ "msup",
14615
+ "msub",
14616
+ "msubsup",
14617
+ "mn",
14618
+ "mi",
14619
+ "mo",
14620
+ "mtext",
14621
+ "munder",
14622
+ "mover",
14623
+ "munderover",
14624
+ "mtable",
14625
+ "mtr",
14626
+ "mtd",
14627
+ "msqrt",
14628
+ "mroot",
14629
+ "mstyle",
14630
+ "merror",
14631
+ "mpadded",
14632
+ "mphantom",
14633
+ "menclose",
14634
+ "semantics",
14635
+ "annotation",
14636
+ "annotation-xml"
14637
+ ]);
14638
+ function namespaceForTag(tag) {
14639
+ if (SVG_ROOT_TAGS.has(tag) || SVG_ROOT_TAGS.has(tag.toLowerCase()))
14640
+ return "svg";
14641
+ if (MATHML_ROOT_TAGS.has(tag) || MATHML_ROOT_TAGS.has(tag.toLowerCase()))
14642
+ return "math";
14643
+ return null;
14644
+ }
14645
+ function detectRootNamespaceWrapTag(template) {
14589
14646
  const stripped = stripLeadingNonContent(template);
14590
14647
  const m = stripped.match(/^<\s*([A-Za-z][A-Za-z0-9-]*)/);
14591
- if (m) {
14592
- const tag = m[1];
14593
- if (SVG_ROOT_TAGS.has(tag))
14594
- return true;
14595
- return SVG_ROOT_TAGS.has(tag.toLowerCase());
14596
- }
14648
+ if (m)
14649
+ return namespaceForTag(m[1]);
14597
14650
  const branches = extractConditionalBranchTemplates(stripped);
14598
14651
  if (branches === null || branches.length === 0)
14599
- return false;
14600
- return branches.every(templateRootIsSvg);
14652
+ return null;
14653
+ let result;
14654
+ for (const branch of branches) {
14655
+ const branchNs = detectRootNamespaceWrapTag(branch);
14656
+ if (result === undefined) {
14657
+ result = branchNs;
14658
+ } else if (result !== branchNs) {
14659
+ return null;
14660
+ }
14661
+ }
14662
+ return result ?? null;
14601
14663
  }
14602
- function multiRootTemplateNeedsSvgWrap(template) {
14664
+ function multiRootTemplateNeedsNamespaceWrap(template) {
14603
14665
  const m = stripLeadingNonContent(template).match(/^<\s*([A-Za-z][A-Za-z0-9-]*)/);
14604
- if (m && m[1].toLowerCase() === "svg")
14605
- return false;
14606
- return templateRootIsSvg(template);
14666
+ if (m) {
14667
+ const tagLower = m[1].toLowerCase();
14668
+ if (tagLower === "svg" || tagLower === "math")
14669
+ return null;
14670
+ }
14671
+ return detectRootNamespaceWrapTag(template);
14672
+ }
14673
+ function namespaceWrapForTemplate(template) {
14674
+ const wrapTag = detectRootNamespaceWrapTag(template);
14675
+ return {
14676
+ wrapTag,
14677
+ childPath: wrapTag ? ".firstElementChild.firstElementChild" : ".firstElementChild"
14678
+ };
14679
+ }
14680
+ function multiRootNamespaceWrapForTemplate(template) {
14681
+ const wrapTag = multiRootTemplateNeedsNamespaceWrap(template);
14682
+ return {
14683
+ wrapTag,
14684
+ childPath: wrapTag ? ".firstElementChild" : ""
14685
+ };
14686
+ }
14687
+ function wrapHtmlForNamespace(html, wrapTag) {
14688
+ return wrapTag ? `<${wrapTag}>${html}</${wrapTag}>` : html;
14607
14689
  }
14608
14690
  function stripLeadingNonContent(template) {
14609
14691
  let s = template.trimStart();
@@ -14628,32 +14710,26 @@ function extractConditionalBranchTemplates(template) {
14628
14710
  return findTopLevelTemplateLiterals(expr);
14629
14711
  }
14630
14712
  function emitTemplateCloneInline(template) {
14631
- if (templateRootIsSvg(template)) {
14632
- return `const __tpl = document.createElement('template'); __tpl.innerHTML = \`<svg>${template}</svg>\`; return __tpl.content.firstElementChild.firstElementChild.cloneNode(true)`;
14633
- }
14634
- return `const __tpl = document.createElement('template'); __tpl.innerHTML = \`${template}\`; return __tpl.content.firstElementChild.cloneNode(true)`;
14713
+ const { wrapTag, childPath } = namespaceWrapForTemplate(template);
14714
+ const html = wrapHtmlForNamespace(template, wrapTag);
14715
+ return `const __tpl = document.createElement('template'); __tpl.innerHTML = \`${html}\`; return __tpl.content${childPath}.cloneNode(true)`;
14635
14716
  }
14636
14717
  function emitHoistedTemplateDecl(lines, indent, tplVar, skeletonTemplate) {
14637
- const isSvg = templateRootIsSvg(skeletonTemplate);
14638
- const html = isSvg ? `<svg>${skeletonTemplate}</svg>` : skeletonTemplate;
14718
+ const { wrapTag } = namespaceWrapForTemplate(skeletonTemplate);
14719
+ const html = wrapHtmlForNamespace(skeletonTemplate, wrapTag);
14639
14720
  lines.push(`${indent}const ${tplVar} = document.createElement('template')`);
14640
14721
  lines.push(`${indent}${tplVar}.innerHTML = \`${html}\``);
14641
14722
  }
14642
14723
  function hoistedCloneExpr(tplVar, skeletonTemplate) {
14643
- return templateRootIsSvg(skeletonTemplate) ? `${tplVar}.content.firstElementChild.firstElementChild.cloneNode(true)` : `${tplVar}.content.firstElementChild.cloneNode(true)`;
14724
+ return `${tplVar}.content${namespaceWrapForTemplate(skeletonTemplate).childPath}.cloneNode(true)`;
14644
14725
  }
14645
14726
  function emitTemplateCloneLines(template, indent) {
14646
- if (templateRootIsSvg(template)) {
14647
- return [
14648
- `${indent}const __tpl = document.createElement('template')`,
14649
- `${indent}__tpl.innerHTML = \`<svg>${template}</svg>\``,
14650
- `${indent}return __tpl.content.firstElementChild.firstElementChild.cloneNode(true)`
14651
- ];
14652
- }
14727
+ const { wrapTag, childPath } = namespaceWrapForTemplate(template);
14728
+ const html = wrapHtmlForNamespace(template, wrapTag);
14653
14729
  return [
14654
14730
  `${indent}const __tpl = document.createElement('template')`,
14655
- `${indent}__tpl.innerHTML = \`${template}\``,
14656
- `${indent}return __tpl.content.firstElementChild.cloneNode(true)`
14731
+ `${indent}__tpl.innerHTML = \`${html}\``,
14732
+ `${indent}return __tpl.content${childPath}.cloneNode(true)`
14657
14733
  ];
14658
14734
  }
14659
14735
  function emitLoopItemElementSetup(lines, opts) {
@@ -14685,9 +14761,9 @@ function emitLoopItemElementSetup(lines, opts) {
14685
14761
  lines.push(`${indent}})()${mountRow ? ")" : ""}`);
14686
14762
  }
14687
14763
  function emitMultiRootTemplateCloneLines(template, indent, varEl, varExtras) {
14688
- const isSvg = multiRootTemplateNeedsSvgWrap(template);
14689
- const innerHtmlExpr = isSvg ? `\`<svg>${template}</svg>\`` : `\`${template}\``;
14690
- const parentExpr = isSvg ? `__tpl.content.firstElementChild` : `__tpl.content`;
14764
+ const { wrapTag, childPath } = multiRootNamespaceWrapForTemplate(template);
14765
+ const innerHtmlExpr = `\`${wrapHtmlForNamespace(template, wrapTag)}\``;
14766
+ const parentExpr = `__tpl.content${childPath}`;
14691
14767
  return [
14692
14768
  `${indent}const __tpl = document.createElement('template')`,
14693
14769
  `${indent}__tpl.innerHTML = ${innerHtmlExpr}`,
@@ -14918,6 +14994,9 @@ function jsxChildrenContainComponent(nodes) {
14918
14994
  }
14919
14995
  return false;
14920
14996
  }
14997
+ function isSingleElementJsxChildren2(nodes) {
14998
+ return nodes.length === 1 && nodes[0].type === "element";
14999
+ }
14921
15000
  function buildRestSpreadNames(ctx) {
14922
15001
  const names = new Set;
14923
15002
  if (ctx.restPropsName)
@@ -14954,6 +15033,8 @@ function buildComponentPropsExpr(props, ctx) {
14954
15033
  const jsxExpr = irChildrenToJsExpr(prop.value.children);
14955
15034
  if (jsxChildrenContainComponent(prop.value.children)) {
14956
15035
  propsForInit.push(`get ${quotePropName(prop.name)}() { return __slot(() => ${jsxExpr}) }`);
15036
+ } else if (prop.name !== "children" && isSingleElementJsxChildren2(prop.value.children)) {
15037
+ propsForInit.push(`get ${quotePropName(prop.name)}() { return bfMarkup(${jsxExpr}) }`);
14957
15038
  } else {
14958
15039
  propsForInit.push(`get ${quotePropName(prop.name)}() { return ${jsxExpr} }`);
14959
15040
  }
@@ -15094,7 +15175,7 @@ function collectElements(node, ctx, siblingOffsets, insideConditional = false) {
15094
15175
  reactiveTextSlotIds: new Set(bindings.reactiveTexts.map((t) => t.slotId))
15095
15176
  };
15096
15177
  skeletonTemplate = buildLoopSkeletonTemplate(l.children[0], skeletonSafeSlots) ?? undefined;
15097
- if (skeletonTemplate && !templateRootIsSvg(skeletonTemplate)) {
15178
+ if (skeletonTemplate && !detectRootNamespaceWrapTag(skeletonTemplate)) {
15098
15179
  skeletonPaths = computeSkeletonSlotPaths(l.children[0], skeletonSafeSlots) ?? undefined;
15099
15180
  }
15100
15181
  }
@@ -16013,6 +16094,8 @@ var RUNTIME_IMPORT_CANDIDATES = [
16013
16094
  "escapeAttr",
16014
16095
  "escapeText",
16015
16096
  "escapeTextOrNode",
16097
+ "bfMarkup",
16098
+ "escapeTextOrMarkup",
16016
16099
  "qsa",
16017
16100
  "qsaItem",
16018
16101
  "qsaChildScope",
@@ -17027,7 +17110,8 @@ function emitRegistrationAndHydration(lines, ctx, _ir, graph, inlinability) {
17027
17110
  const isCommentScope = _ir.root.type === "fragment" && _ir.root.needsScopeComment || _ir.root.type === "component";
17028
17111
  const defParts = [`init: init${name}`];
17029
17112
  if (canGenerateStaticTemplate(_ir.root, propNamesForStaticCheck, inlinableConstants, unsafeLocalNames)) {
17030
- const templateHtml = irToComponentTemplate(_ir.root, inlinableConstants, restSpreadNames, ctx.propsObjectName);
17113
+ const markupSlotIds = new Set(ctx.dynamicElements.map((e) => e.slotId));
17114
+ const templateHtml = irToComponentTemplate(_ir.root, inlinableConstants, restSpreadNames, ctx.propsObjectName, markupSlotIds);
17031
17115
  if (templateHtml) {
17032
17116
  defParts.push(buildTemplateDefPart(ctx, templateHtml));
17033
17117
  }
@@ -20279,9 +20363,8 @@ function stringifyBranchInnerLoops(lines, plan, indent, pc) {
20279
20363
  lines.push(`${indent} ${inner.paramUnwrap}`);
20280
20364
  }
20281
20365
  {
20282
- const isSvg = templateRootIsSvg(inner.wrappedTemplate);
20283
- const innerHtml = isSvg ? `<svg>${inner.wrappedTemplate}</svg>` : inner.wrappedTemplate;
20284
- const childPath = isSvg ? ".firstElementChild.firstElementChild" : ".firstElementChild";
20366
+ const { wrapTag, childPath } = namespaceWrapForTemplate(inner.wrappedTemplate);
20367
+ const innerHtml = wrapTag ? `<${wrapTag}>${inner.wrappedTemplate}</${wrapTag}>` : inner.wrappedTemplate;
20285
20368
  lines.push(`${indent} let __bel${uid} = __existing ?? (() => { const __t = document.createElement('template'); __t.innerHTML = \`${innerHtml}\`; return __t.content${childPath}.cloneNode(true) })()`);
20286
20369
  }
20287
20370
  if (inner.wrappedKey) {
@@ -21022,14 +21105,14 @@ function stringifyStaticLoop(lines, plan) {
21022
21105
  lines.push(` let __iterEl = ${containerVar}.children[${childIndexExpr}]`);
21023
21106
  if (csrMaterialize) {
21024
21107
  lines.push(` if (!__iterEl) {`);
21025
- const isSvg = csrMaterialize.bodyIsMultiRoot ? multiRootTemplateNeedsSvgWrap(csrMaterialize.itemTemplate) : templateRootIsSvg(csrMaterialize.itemTemplate);
21026
- const itemHtml = isSvg ? `<svg>${csrMaterialize.itemTemplate}</svg>` : csrMaterialize.itemTemplate;
21108
+ const { wrapTag, childPath } = csrMaterialize.bodyIsMultiRoot ? multiRootNamespaceWrapForTemplate(csrMaterialize.itemTemplate) : namespaceWrapForTemplate(csrMaterialize.itemTemplate);
21109
+ const itemHtml = wrapHtmlForNamespace(csrMaterialize.itemTemplate, wrapTag);
21027
21110
  if (csrMaterialize.bodyIsMultiRoot) {
21028
21111
  lines.push(` const __mtpl = document.createElement('template')`);
21029
21112
  lines.push(` __mtpl.innerHTML = \`${itemHtml}\``);
21030
21113
  lines.push(` const __anchor = ${containerVar}.children[${childIndexExpr}] ?? null`);
21031
21114
  lines.push(` let __first = null`);
21032
- lines.push(` let __sib = __mtpl.content${isSvg ? ".firstElementChild" : ""}.firstElementChild`);
21115
+ lines.push(` let __sib = __mtpl.content${childPath}.firstElementChild`);
21033
21116
  lines.push(` while (__sib) {`);
21034
21117
  lines.push(` const __next = __sib.nextElementSibling`);
21035
21118
  lines.push(` const __cloned = __sib.cloneNode(true)`);
@@ -21041,7 +21124,7 @@ function stringifyStaticLoop(lines, plan) {
21041
21124
  } else {
21042
21125
  lines.push(` const __tpl = document.createElement('template')`);
21043
21126
  lines.push(` __tpl.innerHTML = \`${itemHtml}\``);
21044
- lines.push(` const __cloned = __tpl.content${isSvg ? ".firstElementChild" : ""}.firstElementChild`);
21127
+ lines.push(` const __cloned = __tpl.content${childPath}`);
21045
21128
  lines.push(` if (__cloned) {`);
21046
21129
  lines.push(` const __anchor = ${containerVar}.children[${childIndexExpr}] ?? null`);
21047
21130
  lines.push(` ${containerVar}.insertBefore(__cloned, __anchor)`);
@@ -21111,9 +21194,8 @@ function emitReactive(lines, inner, indent, pc) {
21111
21194
  lines.push(`${innerIndent} __innerEl${uid}.__bfExtras = __innerExtras${uid}`);
21112
21195
  lines.push(`${indent} }`);
21113
21196
  } else {
21114
- const isSvg = templateRootIsSvg(emit.wrappedTemplate);
21115
- const innerHtml = isSvg ? `<svg>${emit.wrappedTemplate}</svg>` : emit.wrappedTemplate;
21116
- const childPath = isSvg ? ".firstElementChild.firstElementChild" : ".firstElementChild";
21197
+ const { wrapTag, childPath } = namespaceWrapForTemplate(emit.wrappedTemplate);
21198
+ const innerHtml = wrapTag ? `<${wrapTag}>${emit.wrappedTemplate}</${wrapTag}>` : emit.wrappedTemplate;
21117
21199
  lines.push(`${indent} let __innerEl${uid} = __existing ?? (() => { const __t = document.createElement('template'); __t.innerHTML = \`${innerHtml}\`; return __t.content${childPath}.cloneNode(true) })()`);
21118
21200
  }
21119
21201
  if (emit.wrappedKey) {
@@ -22440,7 +22522,8 @@ function generateTemplateOnlyMount(ir, ctx) {
22440
22522
  restSpreadNames.add(ctx.propsObjectName);
22441
22523
  let templateHtml;
22442
22524
  if (canGenerateStaticTemplate(ir.root, propNamesForStaticCheck, inlinableConstants, unsafeLocalNames)) {
22443
- templateHtml = irToComponentTemplate(ir.root, inlinableConstants, restSpreadNames, ctx.propsObjectName);
22525
+ const markupSlotIds = new Set(ctx.dynamicElements.map((e) => e.slotId));
22526
+ templateHtml = irToComponentTemplate(ir.root, inlinableConstants, restSpreadNames, ctx.propsObjectName, markupSlotIds);
22444
22527
  }
22445
22528
  if (!templateHtml) {
22446
22529
  const csrInlinableConstants = csrInlinableConstantsFromCtx(ctx);
@@ -23138,6 +23221,7 @@ function extractSsrDefaults(metadata) {
23138
23221
  out[metadata.restPropsName] = { isRestProps: true, value: {} };
23139
23222
  }
23140
23223
  const bindings = {};
23224
+ const localConsts = localConstValuesByName(metadata);
23141
23225
  for (const c of metadata.localConstants ?? []) {
23142
23226
  if (!c.isModule || c.value === undefined)
23143
23227
  continue;
@@ -23153,14 +23237,26 @@ function extractSsrDefaults(metadata) {
23153
23237
  if (sig.envReader)
23154
23238
  continue;
23155
23239
  const value = tryStaticEval(sig.initialValue, { bindings, propsLike });
23156
- out[sig.getter] = { value: resultToJsonable(value) };
23240
+ if (metadata.propsObjectName !== null && referencesOwnProp(sig.initialValue, metadata.propsObjectName, sig.getter, localConsts)) {
23241
+ if (!(sig.getter in out)) {
23242
+ out[sig.getter] = { propName: sig.getter, value: null };
23243
+ }
23244
+ } else {
23245
+ out[sig.getter] = { value: resultToJsonable(value) };
23246
+ }
23157
23247
  bindings[sig.getter] = value;
23158
23248
  }
23159
23249
  for (const memo of metadata.memos) {
23160
23250
  if (memo.isModule)
23161
23251
  continue;
23162
23252
  const value = tryStaticEval(memo.computation, { bindings, propsLike });
23163
- out[memo.name] = { value: resultToJsonable(value) };
23253
+ if (metadata.propsObjectName !== null && referencesOwnProp(memo.computation, metadata.propsObjectName, memo.name, localConsts)) {
23254
+ if (!(memo.name in out)) {
23255
+ out[memo.name] = { propName: memo.name, value: null };
23256
+ }
23257
+ } else {
23258
+ out[memo.name] = { value: resultToJsonable(value) };
23259
+ }
23164
23260
  bindings[memo.name] = value;
23165
23261
  }
23166
23262
  if (metadata.propsObjectName !== null) {
@@ -23168,12 +23264,12 @@ function extractSsrDefaults(metadata) {
23168
23264
  for (const sig of metadata.signals) {
23169
23265
  if (!sig.getter || sig.isModule || sig.envReader)
23170
23266
  continue;
23171
- collectPropRefs(sig.initialValue, metadata.propsObjectName, referenced);
23267
+ collectPropRefsTransitive(sig.initialValue, metadata.propsObjectName, localConsts, referenced);
23172
23268
  }
23173
23269
  for (const memo of metadata.memos) {
23174
23270
  if (memo.isModule)
23175
23271
  continue;
23176
- collectPropRefs(memo.computation, metadata.propsObjectName, referenced);
23272
+ collectPropRefsTransitive(memo.computation, metadata.propsObjectName, localConsts, referenced);
23177
23273
  }
23178
23274
  for (const name of referenced) {
23179
23275
  if (name in out)
@@ -23183,6 +23279,20 @@ function extractSsrDefaults(metadata) {
23183
23279
  }
23184
23280
  return Object.keys(out).length === 0 ? undefined : out;
23185
23281
  }
23282
+ function localConstValuesByName(metadata) {
23283
+ const out = new Map;
23284
+ for (const c of metadata.localConstants ?? []) {
23285
+ if (c.isModule || c.value === undefined)
23286
+ continue;
23287
+ out.set(c.name, c.value);
23288
+ }
23289
+ return out;
23290
+ }
23291
+ function referencesOwnProp(expr, propsObjectName, name, localConsts) {
23292
+ const referenced = new Set;
23293
+ collectPropRefsTransitive(expr, propsObjectName, localConsts, referenced);
23294
+ return referenced.has(name);
23295
+ }
23186
23296
  function collectPropRefs(expr, propsObjectName, out) {
23187
23297
  if (!expr || !expr.trim())
23188
23298
  return;
@@ -23198,6 +23308,23 @@ function collectPropRefs(expr, propsObjectName, out) {
23198
23308
  };
23199
23309
  visit3(node);
23200
23310
  }
23311
+ function collectPropRefsTransitive(expr, propsObjectName, localConsts, out, visited = new Set) {
23312
+ if (!expr || !expr.trim())
23313
+ return;
23314
+ collectPropRefs(expr, propsObjectName, out);
23315
+ const node = parseExpression2(expr);
23316
+ if (!node)
23317
+ return;
23318
+ for (const id of extractFreeIdentifiersFromNode(node)) {
23319
+ if (visited.has(id))
23320
+ continue;
23321
+ const constValue = localConsts.get(id);
23322
+ if (constValue === undefined)
23323
+ continue;
23324
+ visited.add(id);
23325
+ collectPropRefsTransitive(constValue, propsObjectName, localConsts, out, visited);
23326
+ }
23327
+ }
23201
23328
  function resultToJsonable(v) {
23202
23329
  if (v === UNRESOLVED)
23203
23330
  return null;
@@ -23242,7 +23369,7 @@ function evalStatementsForReturn(statements, ctx) {
23242
23369
  return NO_RETURN;
23243
23370
  }
23244
23371
  function parseExpression2(expr) {
23245
- const sf = ts22.createSourceFile("__ssr_default__.ts", `(${expr})`, ts22.ScriptTarget.Latest, false, ts22.ScriptKind.TS);
23372
+ const sf = ts22.createSourceFile("__ssr_default__.ts", `(${expr})`, ts22.ScriptTarget.Latest, true, ts22.ScriptKind.TS);
23246
23373
  const stmt = sf.statements[0];
23247
23374
  if (!stmt || !ts22.isExpressionStatement(stmt))
23248
23375
  return null;
@@ -23873,6 +24000,38 @@ function classify2(name, origin, expr, parsed, available) {
23873
24000
  }
23874
24001
  return { kind: "derived", name, origin, expr, parsed, frees: [...frees] };
23875
24002
  }
24003
+ function localConstExprsByName(metadata) {
24004
+ const out = new Map;
24005
+ for (const c of metadata.localConstants ?? []) {
24006
+ if (c.isModule || c.declarationKind !== "const" || c.value === undefined)
24007
+ continue;
24008
+ out.set(c.name, c.parsed ?? parseExpression(c.value.trim()));
24009
+ }
24010
+ return out;
24011
+ }
24012
+ function resolveThroughLocalConsts(parsed, localConsts) {
24013
+ let current = parsed;
24014
+ const maxIter = localConsts.size + 1;
24015
+ for (let i = 0;i < maxIter; i++) {
24016
+ const frees = freeIdentifiers(current);
24017
+ if (frees === null)
24018
+ break;
24019
+ let changed = false;
24020
+ for (const name of frees) {
24021
+ const value = localConsts.get(name);
24022
+ if (!value)
24023
+ continue;
24024
+ const inlined = inlineBinding(current, name, value);
24025
+ if (inlined === null)
24026
+ continue;
24027
+ current = inlined;
24028
+ changed = true;
24029
+ }
24030
+ if (!changed)
24031
+ break;
24032
+ }
24033
+ return current;
24034
+ }
23876
24035
  function computeSsrSeedPlan(metadata) {
23877
24036
  const baseScope = metadata.propsParams.map((p) => p.name);
23878
24037
  if (metadata.propsObjectName)
@@ -23881,6 +24040,7 @@ function computeSsrSeedPlan(metadata) {
23881
24040
  baseScope.push(name);
23882
24041
  }
23883
24042
  const available = new Set(baseScope);
24043
+ const localConsts = localConstExprsByName(metadata);
23884
24044
  const steps = [];
23885
24045
  for (const signal of metadata.signals) {
23886
24046
  if (signal.envReader) {
@@ -23892,13 +24052,13 @@ function computeSsrSeedPlan(metadata) {
23892
24052
  }
23893
24053
  }
23894
24054
  const expr = signal.initialValue.trim();
23895
- steps.push(expr === "" ? { kind: "opaque", name: signal.getter, origin: "signal" } : classify2(signal.getter, "signal", expr, parseExpression(expr), available));
24055
+ steps.push(expr === "" ? { kind: "opaque", name: signal.getter, origin: "signal" } : classify2(signal.getter, "signal", expr, resolveThroughLocalConsts(parseExpression(expr), localConsts), available));
23896
24056
  available.add(signal.getter);
23897
24057
  }
23898
24058
  for (const memo of metadata.memos) {
23899
24059
  const body = extractArrowBodyExpression(memo.computation);
23900
24060
  const expr = body?.trim() ?? "";
23901
- steps.push(expr === "" ? { kind: "opaque", name: memo.name, origin: "memo" } : classify2(memo.name, "memo", expr, memo.parsed ?? parseExpression(expr), available));
24061
+ steps.push(expr === "" ? { kind: "opaque", name: memo.name, origin: "memo" } : classify2(memo.name, "memo", expr, resolveThroughLocalConsts(memo.parsed ?? parseExpression(expr), localConsts), available));
23902
24062
  available.add(memo.name);
23903
24063
  }
23904
24064
  return { baseScope, steps };
@@ -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,aAAa,CAAA;AACzH,OAAO,KAAK,EAAE,eAAe,EAA+H,iBAAiB,EAA0B,oBAAoB,EAAc,UAAU,EAAE,MAAM,YAAY,CAAA;AA2GvQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,CA6Id;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,CAqSN;AAocD,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,aAAa,EAAE,gBAAgB,EAAE,GAAG,SAAS;AAChF;;;;GAIG;AACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;AACnC;;;;GAIG;AACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,iBAAiB,CAenB;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,aAAa,EAAE,gBAAgB,EAAE;AACrE;;;;;;;;GAQG;AACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;AACnC;;;GAGG;AACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,oBAAoB,EAAE,CA2ExB"}
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,aAAa,CAAA;AACzH,OAAO,KAAK,EAAE,eAAe,EAA+H,iBAAiB,EAA0B,oBAAoB,EAAc,UAAU,EAAE,MAAM,YAAY,CAAA;AA2GvQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,CA6Id;AAqMD;;;;;;;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,CAsSN;AAocD,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,aAAa,EAAE,gBAAgB,EAAE,GAAG,SAAS;AAChF;;;;GAIG;AACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;AACnC;;;;GAIG;AACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,iBAAiB,CAenB;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,aAAa,EAAE,gBAAgB,EAAE;AACrE;;;;;;;;GAQG;AACH,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;AACnC;;;GAGG;AACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,oBAAoB,EAAE,CA2ExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop-child-arm.d.ts","sourceRoot":"","sources":["../../../../src/ir-to-client-js/control-flow/stringify/loop-child-arm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EACV,6BAA6B,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CAcN;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,uBAAuB,EAC7B,MAAM,EAAE,MAAM,GACb,IAAI,CAYN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,6BAA6B,EACnC,MAAM,EAAE,MAAM,GACb,IAAI,CAIN;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CA0DN;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,SAAS,wBAAwB,EAAE,EACjD,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CAIN;AA0BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,IAAI,CAiDN"}
1
+ {"version":3,"file":"loop-child-arm.d.ts","sourceRoot":"","sources":["../../../../src/ir-to-client-js/control-flow/stringify/loop-child-arm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,KAAK,EACV,6BAA6B,EAC7B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,SAAS,gBAAgB,EAAE,EACjC,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CAcN;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,uBAAuB,EAC7B,MAAM,EAAE,MAAM,GACb,IAAI,CAYN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,6BAA6B,EACnC,MAAM,EAAE,MAAM,GACb,IAAI,CAIN;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CAyDN;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,EAAE,SAAS,wBAAwB,EAAE,EACjD,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,MAAM,GACV,IAAI,CAIN;AA0BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,IAAI,CAiDN"}