@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.
- package/dist/analyzer-context.d.ts.map +1 -1
- package/dist/index.js +731 -691
- package/dist/ir-to-client-js/collect-elements.d.ts +22 -2
- package/dist/ir-to-client-js/collect-elements.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-composite-loop.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-inner-loop.d.ts +14 -2
- package/dist/ir-to-client-js/control-flow/plan/build-inner-loop.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-lazy-row.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-loop-child-arm.d.ts +6 -1
- package/dist/ir-to-client-js/control-flow/plan/build-loop-child-arm.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-plain-row.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/build-reactive-effects.d.ts +3 -2
- package/dist/ir-to-client-js/control-flow/plan/build-reactive-effects.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts +24 -44
- package/dist/ir-to-client-js/control-flow/plan/inner-loop.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/plan/loop-child-arm.d.ts +14 -0
- package/dist/ir-to-client-js/control-flow/plan/loop-child-arm.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/stringify/inner-loop.d.ts +6 -14
- package/dist/ir-to-client-js/control-flow/stringify/inner-loop.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/stringify/lazy-row.d.ts +1 -3
- package/dist/ir-to-client-js/control-flow/stringify/lazy-row.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/stringify/loop-child-arm.d.ts +19 -3
- package/dist/ir-to-client-js/control-flow/stringify/loop-child-arm.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/stringify/loop.d.ts.map +1 -1
- package/dist/ir-to-client-js/control-flow/stringify/reactive-effects.d.ts +5 -1
- package/dist/ir-to-client-js/control-flow/stringify/reactive-effects.d.ts.map +1 -1
- package/dist/ir-to-client-js/emit-reactive.d.ts +54 -0
- package/dist/ir-to-client-js/emit-reactive.d.ts.map +1 -1
- package/dist/ir-to-client-js/html-template.d.ts.map +1 -1
- package/dist/ir-to-client-js/reactivity.d.ts +62 -18
- package/dist/ir-to-client-js/reactivity.d.ts.map +1 -1
- package/dist/ir-to-client-js/types.d.ts +18 -2
- package/dist/ir-to-client-js/types.d.ts.map +1 -1
- package/dist/reactivity-checker.d.ts +18 -0
- package/dist/reactivity-checker.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/__snapshots__/doc-examples.test.ts.snap +128 -10
- package/src/__tests__/binding-scope-ratchet.test.ts +25 -2
- package/src/__tests__/child-prop-fallback-wrap.test.ts +4 -2
- package/src/__tests__/compiler-stress-1244.test.ts +8 -8
- package/src/__tests__/issue-2868-cond-arm-tag-collision.test.ts +185 -0
- package/src/__tests__/issue-2869-attr-dedup-guard.test.ts +141 -0
- package/src/__tests__/loop-index-reactivity.test.ts +208 -0
- package/src/__tests__/map-body-brand-checker.test.ts +176 -0
- package/src/__tests__/nested-loop-index-param.test.ts +27 -5
- package/src/__tests__/nested-loop-non-outer-reactivity.test.ts +177 -0
- package/src/__tests__/nested-loop-plain.test.ts +39 -25
- package/src/__tests__/nested-loop-reactive-attrs.test.ts +12 -4
- package/src/__tests__/preamble-branch-arm-rerun.test.ts +135 -0
- package/src/__tests__/style-css-var-reactive.test.ts +4 -1
- package/src/analyzer-context.ts +12 -10
- package/src/ir-to-client-js/collect-elements.ts +110 -32
- package/src/ir-to-client-js/control-flow/plan/build-composite-loop.ts +2 -0
- package/src/ir-to-client-js/control-flow/plan/build-inner-loop.ts +28 -51
- package/src/ir-to-client-js/control-flow/plan/build-lazy-row.ts +7 -2
- package/src/ir-to-client-js/control-flow/plan/build-loop-child-arm.ts +33 -6
- package/src/ir-to-client-js/control-flow/plan/build-plain-row.ts +7 -1
- package/src/ir-to-client-js/control-flow/plan/build-reactive-effects.ts +18 -6
- package/src/ir-to-client-js/control-flow/plan/inner-loop.ts +24 -45
- package/src/ir-to-client-js/control-flow/plan/loop-child-arm.ts +14 -0
- package/src/ir-to-client-js/control-flow/stringify/inner-loop.ts +20 -66
- package/src/ir-to-client-js/control-flow/stringify/insert.ts +4 -2
- package/src/ir-to-client-js/control-flow/stringify/lazy-row.ts +12 -15
- package/src/ir-to-client-js/control-flow/stringify/loop-child-arm.ts +53 -11
- package/src/ir-to-client-js/control-flow/stringify/loop.ts +4 -2
- package/src/ir-to-client-js/control-flow/stringify/reactive-effects.ts +29 -18
- package/src/ir-to-client-js/emit-reactive.ts +88 -5
- package/src/ir-to-client-js/html-template.ts +9 -1
- package/src/ir-to-client-js/reactivity.ts +73 -27
- package/src/ir-to-client-js/types.ts +19 -3
- package/src/jsx-to-ir.ts +21 -4
- 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
|
|
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
|
|
140
|
-
* per-item signal accessor at runtime;
|
|
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
|
|
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
|
|
160
|
-
* matching
|
|
161
|
-
* expression also reads a signal — the `kind` is purely
|
|
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
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
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,
|
|
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
|
|
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
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAkB,KAAK,MAAM,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAwC,MAAM,aAAa,CAAA;AACpJ,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACX,MAAM,YAAY,CAAA;AAKnB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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('
|
|
1515
|
-
// Outer is signal-backed (composite). Inner is a literal
|
|
1516
|
-
//
|
|
1517
|
-
//
|
|
1518
|
-
// closing over `s`
|
|
1519
|
-
// `s
|
|
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
|
|