@@ -68,7 +68,7 @@ import {
6868 hydrate_block_anchor ,
6969 set_current_hydration_fragment
7070} from './hydration.js' ;
71- import { array_from , define_property , get_descriptor , get_descriptors , is_array } from './utils.js' ;
71+ import { array_from , define_property , get_descriptor , is_array } from './utils.js' ;
7272import { is_promise } from '../common.js' ;
7373import { bind_transition } from './transitions.js' ;
7474
@@ -2262,9 +2262,10 @@ export function each_item_block(item, key, index, render_fn, flags) {
22622262 * @param {null | ((item: V) => string) } key_fn
22632263 * @param {(anchor: null, item: V, index: import('./types.js').MaybeSignal<number>) => void } render_fn
22642264 * @param {null | ((anchor: Node) => void) } fallback_fn
2265+ * @param {typeof reconcile_indexed_array | reconcile_tracked_array } reconcile_fn
22652266 * @returns {void }
22662267 */
2267- export function each ( anchor_node , collection , flags , key_fn , render_fn , fallback_fn ) {
2268+ function each ( anchor_node , collection , flags , key_fn , render_fn , fallback_fn , reconcile_fn ) {
22682269 const is_controlled = ( flags & EACH_IS_CONTROLLED ) !== 0 ;
22692270 const block = create_each_block ( flags , anchor_node ) ;
22702271
@@ -2384,20 +2385,7 @@ export function each(anchor_node, collection, flags, key_fn, render_fn, fallback
23842385 const flags = block . flags ;
23852386 const is_controlled = ( flags & EACH_IS_CONTROLLED ) !== 0 ;
23862387 const anchor_node = block . anchor ;
2387- if ( ( flags & EACH_KEYED ) !== 0 ) {
2388- reconcile_tracked_array (
2389- array ,
2390- block ,
2391- anchor_node ,
2392- is_controlled ,
2393- render_fn ,
2394- keys ,
2395- flags ,
2396- true
2397- ) ;
2398- } else {
2399- reconcile_indexed_array ( array , block , anchor_node , is_controlled , render_fn , flags , true ) ;
2400- }
2388+ reconcile_fn ( array , block , anchor_node , is_controlled , render_fn , flags , true , keys ) ;
24012389 } ,
24022390 block ,
24032391 true
@@ -2419,12 +2407,39 @@ export function each(anchor_node, collection, flags, key_fn, render_fn, fallback
24192407 fallback = fallback . prev ;
24202408 }
24212409 // Clear the array
2422- reconcile_indexed_array ( [ ] , block , anchor_node , is_controlled , render_fn , flags , false ) ;
2410+ reconcile_fn ( [ ] , block , anchor_node , is_controlled , render_fn , flags , false , keys ) ;
24232411 destroy_signal ( /** @type {import('./types.js').EffectSignal } */ ( render ) ) ;
24242412 } ) ;
24252413 block . effect = each ;
24262414}
24272415
2416+ /**
2417+ * @template V
2418+ * @param {Element | Comment } anchor_node
2419+ * @param {() => V[] } collection
2420+ * @param {number } flags
2421+ * @param {null | ((item: V) => string) } key_fn
2422+ * @param {(anchor: null, item: V, index: import('./types.js').MaybeSignal<number>) => void } render_fn
2423+ * @param {null | ((anchor: Node) => void) } fallback_fn
2424+ * @returns {void }
2425+ */
2426+ export function each_keyed ( anchor_node , collection , flags , key_fn , render_fn , fallback_fn ) {
2427+ each ( anchor_node , collection , flags , key_fn , render_fn , fallback_fn , reconcile_tracked_array ) ;
2428+ }
2429+
2430+ /**
2431+ * @template V
2432+ * @param {Element | Comment } anchor_node
2433+ * @param {() => V[] } collection
2434+ * @param {number } flags
2435+ * @param {(anchor: null, item: V, index: import('./types.js').MaybeSignal<number>) => void } render_fn
2436+ * @param {null | ((anchor: Node) => void) } fallback_fn
2437+ * @returns {void }
2438+ */
2439+ export function each_indexed ( anchor_node , collection , flags , render_fn , fallback_fn ) {
2440+ each ( anchor_node , collection , flags , null , render_fn , fallback_fn , reconcile_indexed_array ) ;
2441+ }
2442+
24282443/**
24292444 * @param {Element | Text | Comment } anchor
24302445 * @param {boolean } is_html
0 commit comments