@barefootjs/jsx 0.35.0 → 0.35.1

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 (72) hide show
  1. package/dist/analyzer-context.d.ts.map +1 -1
  2. package/dist/index.js +731 -691
  3. package/dist/ir-to-client-js/collect-elements.d.ts +22 -2
  4. package/dist/ir-to-client-js/collect-elements.d.ts.map +1 -1
  5. package/dist/ir-to-client-js/control-flow/plan/build-composite-loop.d.ts.map +1 -1
  6. package/dist/ir-to-client-js/control-flow/plan/build-inner-loop.d.ts +14 -2
  7. package/dist/ir-to-client-js/control-flow/plan/build-inner-loop.d.ts.map +1 -1
  8. package/dist/ir-to-client-js/control-flow/plan/build-lazy-row.d.ts.map +1 -1
  9. package/dist/ir-to-client-js/control-flow/plan/build-loop-child-arm.d.ts +6 -1
  10. package/dist/ir-to-client-js/control-flow/plan/build-loop-child-arm.d.ts.map +1 -1
  11. package/dist/ir-to-client-js/control-flow/plan/build-plain-row.d.ts.map +1 -1
  12. package/dist/ir-to-client-js/control-flow/plan/build-reactive-effects.d.ts +3 -2
  13. package/dist/ir-to-client-js/control-flow/plan/build-reactive-effects.d.ts.map +1 -1
  14. package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts +24 -44
  15. package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts.map +1 -1
  16. package/dist/ir-to-client-js/control-flow/plan/loop-child-arm.d.ts +14 -0
  17. package/dist/ir-to-client-js/control-flow/plan/loop-child-arm.d.ts.map +1 -1
  18. package/dist/ir-to-client-js/control-flow/stringify/inner-loop.d.ts +6 -14
  19. package/dist/ir-to-client-js/control-flow/stringify/inner-loop.d.ts.map +1 -1
  20. package/dist/ir-to-client-js/control-flow/stringify/lazy-row.d.ts +1 -3
  21. package/dist/ir-to-client-js/control-flow/stringify/lazy-row.d.ts.map +1 -1
  22. package/dist/ir-to-client-js/control-flow/stringify/loop-child-arm.d.ts +19 -3
  23. package/dist/ir-to-client-js/control-flow/stringify/loop-child-arm.d.ts.map +1 -1
  24. package/dist/ir-to-client-js/control-flow/stringify/loop.d.ts.map +1 -1
  25. package/dist/ir-to-client-js/control-flow/stringify/reactive-effects.d.ts +5 -1
  26. package/dist/ir-to-client-js/control-flow/stringify/reactive-effects.d.ts.map +1 -1
  27. package/dist/ir-to-client-js/emit-reactive.d.ts +54 -0
  28. package/dist/ir-to-client-js/emit-reactive.d.ts.map +1 -1
  29. package/dist/ir-to-client-js/html-template.d.ts.map +1 -1
  30. package/dist/ir-to-client-js/reactivity.d.ts +62 -18
  31. package/dist/ir-to-client-js/reactivity.d.ts.map +1 -1
  32. package/dist/ir-to-client-js/types.d.ts +18 -2
  33. package/dist/ir-to-client-js/types.d.ts.map +1 -1
  34. package/dist/reactivity-checker.d.ts +18 -0
  35. package/dist/reactivity-checker.d.ts.map +1 -1
  36. package/package.json +2 -2
  37. package/src/__tests__/__snapshots__/doc-examples.test.ts.snap +128 -10
  38. package/src/__tests__/binding-scope-ratchet.test.ts +25 -2
  39. package/src/__tests__/child-prop-fallback-wrap.test.ts +4 -2
  40. package/src/__tests__/compiler-stress-1244.test.ts +8 -8
  41. package/src/__tests__/issue-2868-cond-arm-tag-collision.test.ts +185 -0
  42. package/src/__tests__/issue-2869-attr-dedup-guard.test.ts +141 -0
  43. package/src/__tests__/loop-index-reactivity.test.ts +208 -0
  44. package/src/__tests__/map-body-brand-checker.test.ts +176 -0
  45. package/src/__tests__/nested-loop-index-param.test.ts +27 -5
  46. package/src/__tests__/nested-loop-non-outer-reactivity.test.ts +177 -0
  47. package/src/__tests__/nested-loop-plain.test.ts +39 -25
  48. package/src/__tests__/nested-loop-reactive-attrs.test.ts +12 -4
  49. package/src/__tests__/preamble-branch-arm-rerun.test.ts +135 -0
  50. package/src/__tests__/style-css-var-reactive.test.ts +4 -1
  51. package/src/analyzer-context.ts +12 -10
  52. package/src/ir-to-client-js/collect-elements.ts +110 -32
  53. package/src/ir-to-client-js/control-flow/plan/build-composite-loop.ts +2 -0
  54. package/src/ir-to-client-js/control-flow/plan/build-inner-loop.ts +28 -51
  55. package/src/ir-to-client-js/control-flow/plan/build-lazy-row.ts +7 -2
  56. package/src/ir-to-client-js/control-flow/plan/build-loop-child-arm.ts +33 -6
  57. package/src/ir-to-client-js/control-flow/plan/build-plain-row.ts +7 -1
  58. package/src/ir-to-client-js/control-flow/plan/build-reactive-effects.ts +18 -6
  59. package/src/ir-to-client-js/control-flow/plan/inner-loop.ts +24 -45
  60. package/src/ir-to-client-js/control-flow/plan/loop-child-arm.ts +14 -0
  61. package/src/ir-to-client-js/control-flow/stringify/inner-loop.ts +20 -66
  62. package/src/ir-to-client-js/control-flow/stringify/insert.ts +4 -2
  63. package/src/ir-to-client-js/control-flow/stringify/lazy-row.ts +12 -15
  64. package/src/ir-to-client-js/control-flow/stringify/loop-child-arm.ts +53 -11
  65. package/src/ir-to-client-js/control-flow/stringify/loop.ts +4 -2
  66. package/src/ir-to-client-js/control-flow/stringify/reactive-effects.ts +29 -18
  67. package/src/ir-to-client-js/emit-reactive.ts +88 -5
  68. package/src/ir-to-client-js/html-template.ts +9 -1
  69. package/src/ir-to-client-js/reactivity.ts +73 -27
  70. package/src/ir-to-client-js/types.ts +19 -3
  71. package/src/jsx-to-ir.ts +21 -4
  72. package/src/reactivity-checker.ts +60 -0
@@ -21,8 +21,19 @@ import { BindingScope } from '../scope/binding-scope.ts';
21
21
  * `index` field through before this fix (see each call site's own
22
22
  * `undefined`/omitted-arg default), so `undefined` here still means "not
23
23
  * guarded," not "no index param."
24
+ *
25
+ * `parentScope` (#2861): stacks this loop-row frame on top of an
26
+ * ENCLOSING loop's own scope, rather than always starting from
27
+ * `BindingScope.EMPTY` — for a nested `.map()` inside another `.map()`'s
28
+ * JSX body. `BindingScope.lookup`/`valueBoundNames` search innermost-first
29
+ * across every frame, so a row expression referencing the OUTER loop's
30
+ * item/index (with no dependency on the INNER loop's own item/index or any
31
+ * signal) is still granted a slot and classified reactive, instead of
32
+ * silently returning `'none'` because only the inner-most frame was ever
33
+ * visible. Omitted (or `undefined`) for a loop with no enclosing loop —
34
+ * identical to the pre-#2861 shape.
24
35
  */
25
- export declare function buildLoopRowScope(loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], preambleNames?: ReadonlySet<string>, loopIndex?: string | null): BindingScope | undefined;
36
+ export declare function buildLoopRowScope(loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], preambleNames?: ReadonlySet<string>, loopIndex?: string | null, parentScope?: BindingScope): BindingScope | undefined;
26
37
  /**
27
38
  * Phase 2 reactivity detection: determines if a code expression needs `createEffect`
28
39
  * wrapping during IR → Client JS generation.
@@ -133,14 +144,28 @@ export declare function needsEffectWrapper(expr: string, ctx: ClientJsContext, f
133
144
  /**
134
145
  * Why a given expression should be treated as reactive inside a loop item.
135
146
  *
136
- * Surfaces the two distinct reasons loop-child collectors care about:
147
+ * Surfaces the three distinct reasons loop-child collectors care about:
137
148
  * - `signal-or-memo-or-prop` — the expression reads a signal getter, a memo,
138
149
  * or a prop name (what `needsEffectWrapper` already classifies).
139
- * - `loop-param` — the expression reads the loop parameter, which becomes a
140
- * per-item signal accessor at runtime; the string-level `needsEffectWrapper`
141
- * does not know about loop params.
150
+ * - `loop-param` — the expression reads the loop's item (or a destructured
151
+ * binding of it), which becomes a per-item signal accessor at runtime;
152
+ * the string-level `needsEffectWrapper` does not know about loop params.
153
+ * - `loop-index` (#2861) — the expression reads ONLY the loop's index
154
+ * parameter (`.map((item, i) => ...)`'s `i`), with no item/signal/memo/prop
155
+ * read anywhere else in it (e.g. bare `{i}`, `class={i % 2 === 0 ? …}`).
156
+ * `mapArray`/`mapArrayAnchored` hand `renderItem` an index ACCESSOR
157
+ * exactly like the item accessor (#2859/#2860), and `mapArrayLazy` tracks
158
+ * a row's position on `entry.index` exactly like `entry.item` — but
159
+ * before this classification existed, nothing ever put such an
160
+ * expression in front of that machinery in the first place: Phase 1
161
+ * (`jsx-to-ir.ts`'s `referencesLoopParam`) already grants it a patchable
162
+ * slot via `BindingScope.valueBoundNames()` (item/index/destructure
163
+ * together), while this function — Phase 2 — had no equivalent case for
164
+ * the index alone, so the slot was written once at row-creation time and
165
+ * never revisited.
142
166
  *
143
- * `none` means neither applies and the collector can skip the expression.
167
+ * `none` means none of the three applies and the collector can skip the
168
+ * expression.
144
169
  *
145
170
  * Consolidates the duplicated reactive-classification check shared by
146
171
  * `collectLoopChildReactiveTexts`, `collectLoopChildReactiveAttrs`, and
@@ -153,21 +178,36 @@ export type ReactivitySource = {
153
178
  } | {
154
179
  kind: 'loop-param';
155
180
  param: string;
181
+ } | {
182
+ kind: 'loop-index';
183
+ param: string;
156
184
  };
157
185
  /**
158
186
  * Classify a (constant-expanded) expression as reactive inside a loop item.
159
- * See `ReactivitySource` for the two reasons we care about. Loop-param
160
- * matching takes precedence so `loop-param` is reported even when the
161
- * expression also reads a signal — the `kind` is purely informational and
162
- * collectors only care about `kind !== 'none'`.
187
+ * See `ReactivitySource` for the three reasons we care about. Loop-param
188
+ * and loop-index matching take precedence so one of them is reported even
189
+ * when the expression also reads a signal — the `kind` is purely
190
+ * informational and collectors only care about `kind !== 'none'`.
191
+ *
192
+ * Takes the row's `BindingScope` (#2482) rather than a raw `(loopParam,
193
+ * loopParamBindings)` pair so this reads the EXACT SAME query Phase 1's
194
+ * `referencesLoopParam` reads (`scope.valueBoundNames()` — item/index/
195
+ * destructure together) to decide whether an expression gets a patchable
196
+ * slot at all. `undefined` means no enclosing loop.
197
+ *
198
+ * For destructured `.map()` callbacks (#951), a `'destructure'`-sourced
199
+ * binding is reported as `loop-param` — the pattern text itself (e.g.
200
+ * `{ id, label }`) never word-matches on a bare binding like `id`, so
201
+ * iterating `valueBoundNames()` (rather than testing the raw param text)
202
+ * is what catches a destructured reference at all.
163
203
  *
164
- * For destructured `.map()` callbacks (#951), `loopParamBindings` lists each
165
- * destructured binding name; any reference to one of those names is treated
166
- * as a `loop-param` hit. The pattern text itself (e.g. `{ id, label }`)
167
- * never word-matches on a bare binding like `id`, so the straight
168
- * `loopParam` check misses destructured references without this widening.
204
+ * Item/destructure bindings are checked before the index so `loop-param`
205
+ * wins when an expression reads both (e.g. `` `${item.id}-${i}` ``) this
206
+ * only affects which `kind` is reported, since every caller of this
207
+ * function besides the two `ReactivitySource`-typed union members simply
208
+ * tests `.kind !== 'none'`.
169
209
  */
170
- export declare function classifyReactivity(expr: string, ctx: ClientJsContext, loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], freeIdentifiers?: ReadonlySet<string>): ReactivitySource;
210
+ export declare function classifyReactivity(expr: string, ctx: ClientJsContext, scope: BindingScope | undefined, freeIdentifiers?: ReadonlySet<string>): ReactivitySource;
171
211
  /**
172
212
  * Recursively collect all event handler expressions from an IR node tree.
173
213
  * Used to extract function identifiers from loop children.
@@ -260,7 +300,9 @@ export declare function collectConditionalBranchChildComponents(node: IRNode, sk
260
300
  * `loopIndex` (Copilot review on #2595): the loop's index param name
261
301
  * (`.map((item, i) => ...)`'s `i`), when known — see `buildLoopRowScope`.
262
302
  */
263
- export declare function collectLoopChildReactiveTexts(node: IRNode, ctx: ClientJsContext, loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], stopAtReactiveConditionals?: boolean, preambleNames?: ReadonlySet<string>, loopIndex?: string | null): LoopChildReactiveText[];
303
+ export declare function collectLoopChildReactiveTexts(node: IRNode, ctx: ClientJsContext, loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], stopAtReactiveConditionals?: boolean, preambleNames?: ReadonlySet<string>, loopIndex?: string | null,
304
+ /** Enclosing loop's own scope, for a NESTED loop (#2861) — see `buildLoopRowScope`. */
305
+ parentScope?: BindingScope): LoopChildReactiveText[];
264
306
  /**
265
307
  * Collect reactive attributes from loop children.
266
308
  * These are dynamic attributes that read signals and need createEffect
@@ -277,5 +319,7 @@ export declare function collectLoopChildReactiveTexts(node: IRNode, ctx: ClientJ
277
319
  * `collectLoopChildConditionals`'s `readsPreamble` check (#2596), the
278
320
  * condition-position twin of the attr check just below this uses it for. */
279
321
  export declare function anyNameIn(names: Iterable<string>, set: ReadonlySet<string>): boolean;
280
- export declare function collectLoopChildReactiveAttrs(node: IRNode, ctx: ClientJsContext, loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], stopAtReactiveConditionals?: boolean, preambleNames?: ReadonlySet<string>, loopIndex?: string | null): LoopChildReactiveAttr[];
322
+ export declare function collectLoopChildReactiveAttrs(node: IRNode, ctx: ClientJsContext, loopParam?: string, loopParamBindings?: readonly LoopParamBinding[], stopAtReactiveConditionals?: boolean, preambleNames?: ReadonlySet<string>, loopIndex?: string | null,
323
+ /** Enclosing loop's own scope, for a NESTED loop (#2861) — see `buildLoopRowScope`. */
324
+ parentScope?: BindingScope): LoopChildReactiveAttr[];
281
325
  //# sourceMappingURL=reactivity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactivity.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/reactivity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactivity.d.ts","sourceRoot":"","sources":["../../src/ir-to-client-js/reactivity.ts"],"names":[],"mappings":"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"}
@@ -365,6 +365,18 @@ export interface BranchLoop extends LoopCore {
365
365
  kind: 'branch';
366
366
  index: string | null;
367
367
  template: string;
368
+ /**
369
+ * Same render as `template`, but with `index` also wrapped as an accessor
370
+ * (`i()`) — rendered structurally at IR time (`irToHtmlTemplate`'s
371
+ * `loopParams`), never via a post-hoc regex pass over `template` (#2868:
372
+ * a word-boundary regex over assembled HTML can match a bare tag name
373
+ * colliding with the index identifier, e.g. `<i>` -> `<i()>`). Present
374
+ * iff the loop declares an index; `build-plain-row.ts` picks this over
375
+ * `template` once lazy eligibility rules out the lazy row plan (which
376
+ * needs the index UNWRAPPED — `mapArrayLazy`'s `createRow` hands it a
377
+ * plain number, never an accessor).
378
+ */
379
+ templateIndexed?: string;
368
380
  containerSlotId: string;
369
381
  preamble?: MapCallbackPreamble;
370
382
  nestedComponents?: IRLoopChildComponent[];
@@ -443,8 +455,6 @@ export interface NestedLoop extends LoopCore {
443
455
  * (and any subsequent reads) are in scope (#1052).
444
456
  */
445
457
  preamble?: MapCallbackPreamble;
446
- /** Whether the inner array references the outer loop param (needs reactive mapArray) */
447
- refsOuterParam?: boolean;
448
458
  /** Child components inside inner loop items (for initChild/createComponent) */
449
459
  childComponents?: import('../types.ts').IRLoopChildComponent[];
450
460
  /** True when this loop is inside a conditional branch (handled by insert() bindEvents instead) */
@@ -573,6 +583,12 @@ export interface TopLevelLoop extends LoopCore {
573
583
  slotId: string;
574
584
  index: string | null;
575
585
  template: string;
586
+ /**
587
+ * Same render as `template`, but with `index` also wrapped as an accessor
588
+ * (`i()`) — see `BranchLoop.templateIndexed` for why this exists as a
589
+ * second structured render rather than a post-hoc regex pass (#2868).
590
+ */
591
+ templateIndexed?: string;
576
592
  /**
577
593
  * Per-iteration HTML template for static-array loops that need to
578
594
  * self-heal on CSR mount (#1247). Unlike `template`, this variant skips
@@ -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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"}
@@ -66,4 +66,22 @@ export declare function analyzeReactivity(node: ts.Node, checker: ts.TypeChecker
66
66
  * need the reasoning chain.
67
67
  */
68
68
  export declare function containsReactiveExpression(node: ts.Node, checker: ts.TypeChecker): boolean;
69
+ /** Subtree JSX check — also used by analyzer-context.ts's getJS() guard. */
70
+ export declare function nodeContainsJsx(node: ts.Node): boolean;
71
+ /**
72
+ * Every node that itself carries the `Reactive<T>` brand within `node`,
73
+ * without stopping at the first match (unlike `analyze`, which only needs
74
+ * one hit to answer "is this reactive"). A caller that needs to read the
75
+ * *text* of the reactive part(s) — e.g. to tell a brand-package wrapper
76
+ * apart from a plain native signal/memo call (#2867) — must not stringify
77
+ * `node` itself: for a `.map()` callback or a ternary with JSX arms, `node`
78
+ * is JSX-bearing, and the write-side trust boundary (`getJS()`,
79
+ * `analyzer-context.ts`) rejects producing text for a JSX-bearing node.
80
+ * Each returned node is JSX-free: property access and identifier leaves
81
+ * cannot contain JSX by construction; a call leaf is the whole call
82
+ * (preserving the `name(...)` shape native-signal/memo regex patterns
83
+ * match against) unless its arguments happen to contain JSX, in which case
84
+ * only the callee is returned instead.
85
+ */
86
+ export declare function collectReactiveBrandLeaves(node: ts.Node, checker: ts.TypeChecker): ts.Node[];
69
87
  //# sourceMappingURL=reactivity-checker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactivity-checker.d.ts","sourceRoot":"","sources":["../src/reactivity-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAc3B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,OAAO,CAAA;IACb,yCAAyC;IACzC,GAAG,EAAE,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAA;IAChD,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAA;CACjB,GACD;IACE,IAAI,EAAE,OAAO,CAAA;IACb,uEAAuE;IACvE,GAAG,EAAE,wBAAwB,GAAG,gBAAgB,CAAA;IAChD,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,WAAW,EAAE,gBAAgB,CAAA;CAC9B,GACD;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAA;AAE5B,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAAA;CACpE;AAmGD,eAAO,MAAM,2BAA2B,EAAE,kBAAgC,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAE5F;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAG1F"}
1
+ {"version":3,"file":"reactivity-checker.d.ts","sourceRoot":"","sources":["../src/reactivity-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAA;AAc3B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAErD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,OAAO,CAAA;IACb,yCAAyC;IACzC,GAAG,EAAE,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAA;IAChD,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAA;CACjB,GACD;IACE,IAAI,EAAE,OAAO,CAAA;IACb,uEAAuE;IACvE,GAAG,EAAE,wBAAwB,GAAG,gBAAgB,CAAA;IAChD,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,4CAA4C;IAC5C,WAAW,EAAE,gBAAgB,CAAA;CAC9B,GACD;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAA;AAE5B,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAAA;CACpE;AAmGD,eAAO,MAAM,2BAA2B,EAAE,kBAAgC,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,kBAAkB,CAE5F;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAG1F;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAGtD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,EAAE,CAqC5F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barefootjs/jsx",
3
- "version": "0.35.0",
3
+ "version": "0.35.1",
4
4
  "description": "JSX compiler for BarefootJS - transforms JSX to server HTML + client JS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,7 +49,7 @@
49
49
  "directory": "packages/jsx"
50
50
  },
51
51
  "dependencies": {
52
- "@barefootjs/shared": "0.35.0"
52
+ "@barefootjs/shared": "0.35.1"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@barefootjs/client": ">=0.2.0",
@@ -2550,6 +2550,99 @@ hydrate('StatementExample', { init: initStatementExample, template: (_p) => \`<d
2550
2550
  export function StatementExample(_p, __bfKey) { return createComponent('StatementExample', _p, __bfKey) }"
2551
2551
  `;
2552
2552
 
2553
+ exports[`docs/core/reactivity/untrack.md doc-examples L79 — (no label) 1`] = `
2554
+ "import { $, createComponent, createSignal, escapeAttr, escapeText, hydrate, lazySlots, mapArrayLazy, qsa, textOrNode, untrack } from '@barefootjs/client/runtime'
2555
+
2556
+ var renderPreview = renderPreview ?? function(id) {
2557
+ return \`<p>Preview for item \${id}</p>\`
2558
+ }
2559
+
2560
+ export function initGallery(__scope, _p = {}) {
2561
+ if (!__scope) return
2562
+ const __scopeId = __scope.getAttribute('bf-s')
2563
+
2564
+ const [items, setItems] = createSignal([{ id: 1, label: 'First' }, { id: 2, label: 'Second' }])
2565
+ const rename = () => setItems(items().map(item => ({ id: item.id, label: item.label + '!' })))
2566
+
2567
+ const [_s0, _s3] = $(__scope, 's0', 's3')
2568
+
2569
+ if (_s0) _s0.addEventListener('click', rename)
2570
+ const __tpl_l0 = document.createElement('template')
2571
+ __tpl_l0.innerHTML = \`<li data-key="" bf="s2"><!--bf:s1--><!--/--></li>\`
2572
+ const __lzp_l0 = [[0]]
2573
+ const __lzs_l0 = [{ id: 's1', kind: 'text', path: [] }]
2574
+ const __lzsc_l0 = [{ id: 's1', kind: 'text', path: __lzp_l0[0] }]
2575
+ mapArrayLazy(() => items(), _s3, (item) => String(item.id), {
2576
+ createRow: (__e, __idx) => {
2577
+ const item = () => __e.item
2578
+ const __el = __tpl_l0.content.firstElementChild.cloneNode(true)
2579
+ const __r = __e.refs = [__el, lazySlots(__el, __lzsc_l0)]
2580
+ const __l = __e.last = []
2581
+ { const __t = __r[0]
2582
+ if (__t) {
2583
+ { const __x = item().label
2584
+ { const __v = __x; if (__v != null) __t.setAttribute('title', String(__v)); else __t.removeAttribute('title') }
2585
+ __l[0] = __x }
2586
+ } }
2587
+ { const __t = __r[0]
2588
+ if (__t) {
2589
+ { const __x = untrack(() => renderPreview(item().id))
2590
+ { const __v = __x; if (__v != null) __t.setAttribute('data-preview', String(__v)); else __t.removeAttribute('data-preview') }
2591
+ __l[1] = __x }
2592
+ } }
2593
+ { const __x = item().label
2594
+ __r[1]('s1', textOrNode(__x))
2595
+ __l[2] = __x }
2596
+ return __el
2597
+ },
2598
+ applyItem: (__e) => {
2599
+ const item = () => __e.item
2600
+ const __r = __e.refs ?? (__e.refs = [])
2601
+ const __l = __e.last ?? (__e.last = [])
2602
+ { const __t = 0 in __r ? __r[0] : (__r[0] = qsa(__e.primaryEl, '[bf="s2"]'))
2603
+ if (__t) {
2604
+ { const __x = item().label
2605
+ if (!(0 in __l) || !Object.is(__l[0], __x)) {
2606
+ { const __v = __x; if (__v != null) __t.setAttribute('title', String(__v)); else __t.removeAttribute('title') }
2607
+ }
2608
+ __l[0] = __x }
2609
+ } }
2610
+ { const __t = 0 in __r ? __r[0] : (__r[0] = qsa(__e.primaryEl, '[bf="s2"]'))
2611
+ if (__t) {
2612
+ { const __x = untrack(() => renderPreview(item().id))
2613
+ if (!(1 in __l) || !Object.is(__l[1], __x)) {
2614
+ { const __v = __x; if (__v != null) __t.setAttribute('data-preview', String(__v)); else __t.removeAttribute('data-preview') }
2615
+ }
2616
+ __l[1] = __x }
2617
+ } }
2618
+ const __d = __r[1] ?? (__r[1] = lazySlots(__e.primaryEl, __lzs_l0))
2619
+ { const __x = item().label
2620
+ if (!(2 in __l) || !Object.is(__l[2], __x)) __d('s1', textOrNode(__x))
2621
+ __l[2] = __x }
2622
+ },
2623
+ applyOuter: (__es, __seed) => {
2624
+ for (const __e of __es) {
2625
+ const item = () => __e.item
2626
+ const __r = __e.refs ?? (__e.refs = [])
2627
+ const __l = __e.last ?? (__e.last = [])
2628
+ { const __t = 0 in __r ? __r[0] : (__r[0] = qsa(__e.primaryEl, '[bf="s2"]'))
2629
+ if (__t) {
2630
+ { const __x = untrack(() => renderPreview(item().id))
2631
+ if (__seed ? (__t.getAttribute('data-preview') !== (__x != null ? String(__x) : null)) : (!(1 in __l) || !Object.is(__l[1], __x))) {
2632
+ { const __v = __x; if (__v != null) __t.setAttribute('data-preview', String(__v)); else __t.removeAttribute('data-preview') }
2633
+ }
2634
+ __l[1] = __x }
2635
+ } }
2636
+ }
2637
+ },
2638
+ }, 'l0')
2639
+
2640
+ }
2641
+
2642
+ hydrate('Gallery', { init: initGallery, template: (_p) => \`<div><button bf="s0">Rename all</button><ul bf="s3"><!--bf-loop:l0-->\${([{ id: 1, label: 'First' }, { id: 2, label: 'Second' }]).map((item) => \`<li data-key="\${escapeAttr(item.id)}" \${(item.label) != null ? 'title="' + escapeAttr(item.label) + '"' : ''} \${(untrack(() => renderPreview(item.id))) != null ? 'data-preview="' + escapeAttr(untrack(() => renderPreview(item.id))) + '"' : ''} bf="s2"><!--bf:s1-->\${escapeText(item.label)}<!--/--></li>\`).join('')}<!--bf-/loop:l0--></ul></div>\` })
2643
+ export function Gallery(_p, __bfKey) { return createComponent('Gallery', _p, __bfKey) }"
2644
+ `;
2645
+
2553
2646
  exports[`docs/core/reactivity/props-reactivity.md doc-examples L16 — (no label) 1`] = `
2554
2647
  "import { createComponent, hydrate } from '@barefootjs/client/runtime'
2555
2648
 
@@ -2635,12 +2728,13 @@ export function initExample(__scope, _p = {}) {
2635
2728
  })
2636
2729
 
2637
2730
  // Reactive child component props
2731
+ { const __l = []
2638
2732
  createEffect(() => {
2639
2733
  const [__Child_s0El] = $c(__scope, 's0')
2640
2734
  if (__Child_s0El) {
2641
2735
  if ('value' in __Child_s0El) { const __val = String(count()); if (__Child_s0El.value !== __val) __Child_s0El.value = __val }
2642
2736
  }
2643
- })
2737
+ }) }
2644
2738
 
2645
2739
  // Initialize child components with props
2646
2740
  initChild('Child', _s0, { get value() { return count() } })
@@ -3253,12 +3347,17 @@ export function initExample(__scope, _p = {}) {
3253
3347
 
3254
3348
 
3255
3349
  // Reactive child component props
3350
+ { const __l = []
3256
3351
  createEffect(() => {
3257
3352
  const [__Dialog_s9El] = $c(__scope, 's9')
3258
3353
  if (__Dialog_s9El) {
3259
- __Dialog_s9El.open = !!(open())
3354
+ { const __x = open()
3355
+ if (!(0 in __l) || !Object.is(__l[0], __x)) {
3356
+ __Dialog_s9El.open = !!(__x)
3357
+ }
3358
+ __l[0] = __x }
3260
3359
  }
3261
- })
3360
+ }) }
3262
3361
 
3263
3362
  // Initialize child components with props
3264
3363
  initChild('Dialog', _s9, { get open() { return open() }, onOpenChange: setOpen })
@@ -3936,11 +4035,16 @@ export function initButton(__scope, _p = {}) {
3936
4035
 
3937
4036
  const [_s0] = $(__scope, 's0')
3938
4037
 
4038
+ { const __l = []
3939
4039
  createEffect(() => {
3940
4040
  if (_s0) {
3941
- { const __v = classes; if (__v != null) _s0.setAttribute('class', String(__v)); else _s0.removeAttribute('class') }
4041
+ { const __x = classes
4042
+ if (!(0 in __l) || !Object.is(__l[0], __x)) {
4043
+ { const __v = __x; if (__v != null) _s0.setAttribute('class', String(__v)); else _s0.removeAttribute('class') }
4044
+ }
4045
+ __l[0] = __x }
3942
4046
  }
3943
- })
4047
+ }) }
3944
4048
 
3945
4049
  if (_s0) applyRestAttrs(_s0, _p, ["class"])
3946
4050
 
@@ -4109,24 +4213,38 @@ export function initProductPage(__scope, _p = {}) {
4109
4213
  __bfw_s2('s2', escapeTextOrNode(__val))
4110
4214
  })
4111
4215
 
4216
+ { const __l = []
4112
4217
  createEffect(() => {
4113
4218
  if (_s4) {
4114
- { const __v = _p.product.image; if (__v != null) _s4.setAttribute('src', String(__v)); else _s4.removeAttribute('src') }
4219
+ { const __x = _p.product.image
4220
+ if (!(0 in __l) || !Object.is(__l[0], __x)) {
4221
+ { const __v = __x; if (__v != null) _s4.setAttribute('src', String(__v)); else _s4.removeAttribute('src') }
4222
+ }
4223
+ __l[0] = __x }
4115
4224
  }
4116
- })
4225
+ }) }
4117
4226
 
4118
4227
 
4119
4228
  // Reactive child component props
4229
+ { const __l = []
4120
4230
  createEffect(() => {
4121
4231
  const [__ReviewStars_s5El] = $c(__scope, 's5')
4122
4232
  if (__ReviewStars_s5El) {
4123
- { const __v = product.rating; if (__v != null) __ReviewStars_s5El.setAttribute('rating', String(__v)); else __ReviewStars_s5El.removeAttribute('rating') }
4233
+ { const __x = product.rating
4234
+ if (!(0 in __l) || !Object.is(__l[0], __x)) {
4235
+ { const __v = __x; if (__v != null) __ReviewStars_s5El.setAttribute('rating', String(__v)); else __ReviewStars_s5El.removeAttribute('rating') }
4236
+ }
4237
+ __l[0] = __x }
4124
4238
  }
4125
4239
  const [__AddToCart_s6El] = $c(__scope, 's6')
4126
4240
  if (__AddToCart_s6El) {
4127
- { const __v = product.id; if (__v != null) __AddToCart_s6El.setAttribute('productId', String(__v)); else __AddToCart_s6El.removeAttribute('productId') }
4241
+ { const __x = product.id
4242
+ if (!(1 in __l) || !Object.is(__l[1], __x)) {
4243
+ { const __v = __x; if (__v != null) __AddToCart_s6El.setAttribute('productId', String(__v)); else __AddToCart_s6El.removeAttribute('productId') }
4244
+ }
4245
+ __l[1] = __x }
4128
4246
  }
4129
- })
4247
+ }) }
4130
4248
 
4131
4249
  // Initialize child components with props
4132
4250
  initChild('ReviewStars', _s5, { get rating() { return product.rating } })
@@ -192,8 +192,16 @@ const ALLOWLIST: Record<string, Partial<Record<Pattern, number>>> = {
192
192
  },
193
193
  // FLOOR (shape 3): `irToPlaceholderTemplate`'s loop-param accessor-rewrite
194
194
  // spec forwarding — see the canonical docstring on
195
- // `wrapExprWithLoopParams` in `ir-to-client-js/utils.ts`.
196
- 'packages/jsx/src/ir-to-client-js/collect-elements.ts': { loopParams: 9 },
195
+ // `wrapExprWithLoopParams` in `ir-to-client-js/utils.ts`. Grew by 3 for
196
+ // #2868: `collectLoopChildConditionals` gained an optional `loopParams`
197
+ // parameter (the full ancestor loop-param chain) so a conditional arm
198
+ // inside an inner `.map()` can render against an outer loop's item/index
199
+ // too — same accessor-rewrite-payload shape, one more forwarding site.
200
+ // Grew by 1 more merging #2861's `parentScope` param (a DIFFERENT,
201
+ // independent extension of the same function for the reactivity-scope
202
+ // concern) alongside #2868's `loopParams` — both trailing params now
203
+ // coexist on `collectLoopChildConditionals`'s signature.
204
+ 'packages/jsx/src/ir-to-client-js/collect-elements.ts': { loopParams: 13 },
197
205
  // FLOOR (shape 2): `computeCsrInlinability`'s fixed-point constant-chain
198
206
  // inlining loop over `ctx.localConstants` — component-scope const
199
207
  // resolution, not loop-row scope.
@@ -202,6 +210,16 @@ const ALLOWLIST: Record<string, Partial<Record<Pattern, number>>> = {
202
210
  // pass a loop-param accessor-rewrite spec (see the file's own comments) —
203
211
  // the remaining mentions are all in that reasoning, not device usage.
204
212
  'packages/jsx/src/ir-to-client-js/control-flow/plan/build-event-delegation.ts': { loopParams: 4 },
213
+ // FLOOR (shape 3, new for #2868): a doc comment pointing at
214
+ // `collect-elements.ts`'s `irToHtmlTemplate` `loopParams` — explaining why
215
+ // `cond.whenTrueHtml`/`whenFalseHtml` must not be re-wrapped post-hoc.
216
+ 'packages/jsx/src/ir-to-client-js/control-flow/plan/build-lazy-row.ts': { loopParams: 1 },
217
+ // FLOOR (shape 3, new for #2868): same doc-comment reference as
218
+ // `build-lazy-row.ts` above.
219
+ 'packages/jsx/src/ir-to-client-js/control-flow/plan/build-loop-child-arm.ts': { loopParams: 1 },
220
+ // FLOOR (shape 3, new for #2868): same doc-comment reference as
221
+ // `build-lazy-row.ts` above.
222
+ 'packages/jsx/src/ir-to-client-js/control-flow/plan/build-reactive-effects.ts': { loopParams: 1 },
205
223
  // FLOOR (shape 3): `irToHtmlTemplate`/`irToPlaceholderTemplate`'s
206
224
  // loop-param accessor-rewrite spec — see `ir-to-client-js/utils.ts`'s
207
225
  // `wrapExprWithLoopParams` docstring (the canonical explanation, pointed
@@ -221,6 +239,11 @@ const ALLOWLIST: Record<string, Partial<Record<Pattern, number>>> = {
221
239
  // `loopParams`-named parameter in `ir-to-client-js/` forwards. See its
222
240
  // docstring (added Stage 4) for the full shape-3 reasoning.
223
241
  'packages/jsx/src/ir-to-client-js/utils.ts': { loopParams: 4 },
242
+ // FLOOR (shape 3, new for #2868): `TopLevelLoop.templateIndexed` /
243
+ // `BranchLoop.templateIndexed`'s doc comments point at `irToHtmlTemplate`'s
244
+ // `loopParams` to explain why the index-wrapped render is a second
245
+ // structured render, not a post-hoc regex pass over `template`.
246
+ 'packages/jsx/src/ir-to-client-js/types.ts': { loopParams: 1 },
224
247
  // `jsx-to-ir.ts` — MIGRATED to 0 in Stage 4: `makeBindingEnv`'s
225
248
  // `loopParams: boundNames` field now reads `loopValueBoundNames:
226
249
  // boundNames`, matching `free-refs.ts`'s renamed field. No entry needed
@@ -260,7 +260,9 @@ describe('Solid-style wrap-by-default fallback for child-component props (#942)'
260
260
  // The emitted code rewrites `props.xxx` to the internal props-param
261
261
  // name (`_p.xxx`) via rewriteDestructuredPropsInExpr. Assert on the
262
262
  // emitted form — the gate's `expandedValue.includes('props.')` check
263
- // still runs against the source expression before rewriting.
264
- expect(clientJs).toMatch(/__v\s*=\s*_p\.title/)
263
+ // still runs against the source expression before rewriting. The
264
+ // dedup-guarded write (#2869) computes into `__x` first, then assigns
265
+ // `__v = __x` inside `emitAttrUpdate`'s own generic branch.
266
+ expect(clientJs).toMatch(/__x\s*=\s*_p\.title/)
265
267
  })
266
268
  })
@@ -1511,12 +1511,13 @@ describe('ref callback re-invocation on remount under the same key (#1244)', ()
1511
1511
  expect(c.clientJs).toContain('refMap.set(it().id')
1512
1512
  })
1513
1513
 
1514
- test('static inner .map() under reactive outer: ref callback closing over inner param stays raw', () => {
1515
- // Outer is signal-backed (composite). Inner is a literal static array
1516
- // buildStaticEmit handles its per-iteration setup via `forEach`.
1517
- // The inner param `s` is the raw value in `forEach`, so a ref callback
1518
- // closing over `s` must NOT be signal-accessor-wrapped (would emit
1519
- // `s()` and throw at runtime).
1514
+ test('inner .map() under reactive outer: ref callback closing over inner param is accessor-wrapped (#2865)', () => {
1515
+ // Outer is signal-backed (composite). Inner is a literal array with no
1516
+ // outer-item dependency. Before #2865 this routed to `buildStaticEmit`'s
1517
+ // `forEach`, where the inner param `s` was the raw value, so a ref
1518
+ // callback closing over `s` was emitted unwrapped. Every inner loop now
1519
+ // gets the full reactive `mapArray` emission — `s` is a signal accessor
1520
+ // in that renderItem, so the ref callback must close over `s()`.
1520
1521
  const src = `
1521
1522
  'use client'
1522
1523
  import { createSignal } from '@barefootjs/client'
@@ -1540,8 +1541,7 @@ describe('ref callback re-invocation on remount under the same key (#1244)', ()
1540
1541
  `
1541
1542
  const c = compile(src)
1542
1543
  expectNoFatalErrors(c)
1543
- expect(c.clientJs).toMatch(/refMap\.set\(\s*s\s*,/)
1544
- expect(c.clientJs).not.toMatch(/refMap\.set\(\s*s\(\)/)
1544
+ expect(c.clientJs).toMatch(/refMap\.set\(\s*s\(\)\s*,/)
1545
1545
  })
1546
1546
  })
1547
1547