@@ -11,11 +11,11 @@ import { empty } from '../operations.js';
11
11
import { insert , remove } from '../reconciler.js' ;
12
12
import { untrack } from '../../runtime.js' ;
13
13
import {
14
- destroy_effect ,
14
+ block ,
15
+ branch ,
15
16
effect ,
16
17
pause_effect ,
17
18
pause_effects ,
18
- render_effect ,
19
19
resume_effect
20
20
} from '../../reactivity/effects.js' ;
21
21
import { source , mutable_source , set } from '../../reactivity/sources.js' ;
@@ -43,7 +43,7 @@ export function set_current_each_item(item) {
43
43
* @param {number } flags
44
44
* @param {() => V[] } get_collection
45
45
* @param {null | ((item: V) => string) } get_key
46
- * @param {(anchor: Node, item: V , index: import('#client').MaybeSource<number>) => void } render_fn
46
+ * @param {(anchor: Node, item: import('#client').MaybeSource<V> , index: import('#client').MaybeSource<number>) => void } render_fn
47
47
* @param {null | ((anchor: Node) => void) } fallback_fn
48
48
* @param {typeof reconcile_indexed_array | reconcile_tracked_array } reconcile_fn
49
49
* @returns {void }
@@ -67,7 +67,7 @@ function each(anchor, flags, get_collection, get_key, render_fn, fallback_fn, re
67
67
/** @type {import('#client').Effect | null } */
68
68
var fallback = null ;
69
69
70
- var effect = render_effect ( ( ) => {
70
+ block ( ( ) => {
71
71
var collection = get_collection ( ) ;
72
72
73
73
var array = is_array ( collection )
@@ -152,15 +152,7 @@ function each(anchor, flags, get_collection, get_key, render_fn, fallback_fn, re
152
152
if ( fallback ) {
153
153
resume_effect ( fallback ) ;
154
154
} else {
155
- fallback = render_effect ( ( ) => {
156
- var dom = fallback_fn ( anchor ) ;
157
-
158
- return ( ) => {
159
- if ( dom !== undefined ) {
160
- remove ( dom ) ;
161
- }
162
- } ;
163
- } , true ) ;
155
+ fallback = branch ( ( ) => fallback_fn ( anchor ) ) ;
164
156
}
165
157
} else if ( fallback !== null ) {
166
158
pause_effect ( fallback , ( ) => {
@@ -174,17 +166,6 @@ function each(anchor, flags, get_collection, get_key, render_fn, fallback_fn, re
174
166
set_hydrating ( true ) ;
175
167
}
176
168
} ) ;
177
-
178
- effect . ondestroy = ( ) => {
179
- for ( var item of state . items ) {
180
- if ( item . e . dom !== null ) {
181
- remove ( item . e . dom ) ;
182
- destroy_effect ( item . e ) ;
183
- }
184
- }
185
-
186
- if ( fallback ) destroy_effect ( fallback ) ;
187
- } ;
188
169
}
189
170
190
171
/**
@@ -193,7 +174,7 @@ function each(anchor, flags, get_collection, get_key, render_fn, fallback_fn, re
193
174
* @param {number } flags
194
175
* @param {() => V[] } get_collection
195
176
* @param {null | ((item: V) => string) } get_key
196
- * @param {(anchor: Node, item: V , index: import('#client').MaybeSource<number>) => void } render_fn
177
+ * @param {(anchor: Node, item: import('#client').MaybeSource<V> , index: import('#client').MaybeSource<number>) => void } render_fn
197
178
* @param {null | ((anchor: Node) => void) } [fallback_fn]
198
179
* @returns {void }
199
180
*/
@@ -206,7 +187,7 @@ export function each_keyed(anchor, flags, get_collection, get_key, render_fn, fa
206
187
* @param {Element | Comment } anchor
207
188
* @param {number } flags
208
189
* @param {() => V[] } get_collection
209
- * @param {(anchor: Node, item: V , index: import('#client').MaybeSource<number>) => void } render_fn
190
+ * @param {(anchor: Node, item: import('#client').MaybeSource<V> , index: import('#client').MaybeSource<number>) => void } render_fn
210
191
* @param {null | ((anchor: Node) => void) } [fallback_fn]
211
192
* @returns {void }
212
193
*/
@@ -219,7 +200,7 @@ export function each_indexed(anchor, flags, get_collection, render_fn, fallback_
219
200
* @param {Array<V> } array
220
201
* @param {import('#client').EachState } state
221
202
* @param {Element | Comment | Text } anchor
222
- * @param {(anchor: Node, item: V , index: number | import('#client').Source<number>) => void } render_fn
203
+ * @param {(anchor: Node, item: import('#client').MaybeSource<V> , index: number | import('#client').Source<number>) => void } render_fn
223
204
* @param {number } flags
224
205
* @returns {void }
225
206
*/
@@ -275,7 +256,7 @@ function reconcile_indexed_array(array, state, anchor, render_fn, flags) {
275
256
* @param {Array<V> } array
276
257
* @param {import('#client').EachState } state
277
258
* @param {Element | Comment | Text } anchor
278
- * @param {(anchor: Node, item: V , index: number | import('#client').Source<number>) => void } render_fn
259
+ * @param {(anchor: Node, item: import('#client').MaybeSource<V> , index: number | import('#client').Source<number>) => void } render_fn
279
260
* @param {number } flags
280
261
* @param {any[] } keys
281
262
* @returns {void }
@@ -342,7 +323,6 @@ function reconcile_tracked_array(array, state, anchor, render_fn, flags, keys) {
342
323
var i ;
343
324
var index ;
344
325
var last_item ;
345
- var last_sibling ;
346
326
347
327
// store the indexes of each item in the new world
348
328
for ( i = start ; i < b ; i += 1 ) {
@@ -548,45 +528,32 @@ function update_item(item, value, index, type) {
548
528
* @param {V } value
549
529
* @param {unknown } key
550
530
* @param {number } index
551
- * @param {(anchor: Node, item: V, index: number | import('#client').Value<number>) => void } render_fn
531
+ * @param {(anchor: Node, item: V | import('#client').Source<V> , index: number | import('#client').Value<number>) => void } render_fn
552
532
* @param {number } flags
553
533
* @returns {import('#client').EachItem }
554
534
*/
555
535
function create_item ( anchor , value , key , index , render_fn , flags ) {
556
- var each_item_not_reactive = ( flags & EACH_ITEM_REACTIVE ) === 0 ;
557
-
558
- /** @type {import('#client').EachItem } */
559
- var item = {
560
- a : null ,
561
- // dom
562
- // @ts -expect-error
563
- e : null ,
564
- // index
565
- i : ( flags & EACH_INDEX_REACTIVE ) === 0 ? index : source ( index ) ,
566
- // key
567
- k : key ,
568
- // item
569
- v : each_item_not_reactive
570
- ? value
571
- : ( flags & EACH_IS_STRICT_EQUALS ) !== 0
572
- ? source ( value )
573
- : mutable_source ( value )
574
- } ;
575
-
576
536
var previous_each_item = current_each_item ;
577
537
578
538
try {
579
- current_each_item = item ;
580
-
581
- item . e = render_effect ( ( ) => {
582
- var dom = render_fn ( anchor , item . v , item . i ) ;
539
+ var reactive = ( flags & EACH_ITEM_REACTIVE ) !== 0 ;
540
+ var mutable = ( flags & EACH_IS_STRICT_EQUALS ) === 0 ;
541
+
542
+ var v = reactive ? ( mutable ? mutable_source ( value ) : source ( value ) ) : value ;
543
+ var i = ( flags & EACH_INDEX_REACTIVE ) === 0 ? index : source ( index ) ;
544
+
545
+ /** @type {import('#client').EachItem } */
546
+ var item = {
547
+ i,
548
+ v,
549
+ k : key ,
550
+ a : null ,
551
+ // @ts -expect-error
552
+ e : null
553
+ } ;
583
554
584
- return ( ) => {
585
- if ( dom !== undefined ) {
586
- remove ( dom ) ;
587
- }
588
- } ;
589
- } , true ) ;
555
+ current_each_item = item ;
556
+ item . e = branch ( ( ) => render_fn ( anchor , v , i ) ) ;
590
557
591
558
return item ;
592
559
} finally {
0 commit comments