svelte 5.43.11 → 5.43.12

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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "svelte",
3
3
  "description": "Cybernetically enhanced web apps",
4
4
  "license": "MIT",
5
- "version": "5.43.11",
5
+ "version": "5.43.12",
6
6
  "type": "module",
7
7
  "types": "./types/index.d.ts",
8
8
  "engines": {
@@ -129,8 +129,11 @@ function pause_effects(state, to_destroy, controlled_anchor) {
129
129
  export function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {
130
130
  var anchor = node;
131
131
 
132
- /** @type {EachState} */
133
- var state = { flags, items: new Map(), first: null };
132
+ /** @type {Map<any, EachItem>} */
133
+ var items = new Map();
134
+
135
+ /** @type {EachItem | null} */
136
+ var first = null;
134
137
 
135
138
  var is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;
136
139
  var is_reactive_value = (flags & EACH_ITEM_REACTIVE) !== 0;
@@ -166,7 +169,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
166
169
  var first_run = true;
167
170
 
168
171
  function commit() {
169
- reconcile(each_effect, array, state, anchor, flags, get_key);
172
+ reconcile(state, array, anchor, flags, get_key);
170
173
 
171
174
  if (fallback !== null) {
172
175
  if (array.length === 0) {
@@ -177,7 +180,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
177
180
  resume_effect(fallback.effect);
178
181
  }
179
182
 
180
- each_effect.first = fallback.effect;
183
+ effect.first = fallback.effect;
181
184
  } else {
182
185
  pause_effect(fallback.effect, () => {
183
186
  // TODO only null out if no pending batch needs it,
@@ -189,7 +192,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
189
192
  }
190
193
  }
191
194
 
192
- var each_effect = block(() => {
195
+ var effect = block(() => {
193
196
  array = /** @type {V[]} */ (get(each_array));
194
197
  var length = array.length;
195
198
 
@@ -230,7 +233,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
230
233
  var value = array[i];
231
234
  var key = get_key(value, i);
232
235
 
233
- var item = first_run ? null : state.items.get(key);
236
+ var item = first_run ? null : items.get(key);
234
237
 
235
238
  if (item) {
236
239
  // update before reconciliation, to trigger any async updates
@@ -263,7 +266,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
263
266
  item.o = true;
264
267
 
265
268
  if (prev === null) {
266
- state.first = item;
269
+ first = item;
267
270
  } else {
268
271
  prev.next = item;
269
272
  }
@@ -271,7 +274,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
271
274
  prev = item;
272
275
  }
273
276
 
274
- state.items.set(key, item);
277
+ items.set(key, item);
275
278
  }
276
279
 
277
280
  keys.add(key);
@@ -302,7 +305,7 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
302
305
 
303
306
  if (!first_run) {
304
307
  if (defer) {
305
- for (const [key, item] of state.items) {
308
+ for (const [key, item] of items) {
306
309
  if (!keys.has(key)) {
307
310
  batch.skipped_effects.add(item.e);
308
311
  }
@@ -331,6 +334,9 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
331
334
  get(each_array);
332
335
  });
333
336
 
337
+ /** @type {EachState} */
338
+ var state = { effect, flags, items, first };
339
+
334
340
  first_run = false;
335
341
 
336
342
  if (hydrating) {
@@ -341,15 +347,14 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
341
347
  /**
342
348
  * Add, remove, or reorder items output by an each block as its input changes
343
349
  * @template V
344
- * @param {Effect} each_effect
345
- * @param {Array<V>} array
346
350
  * @param {EachState} state
351
+ * @param {Array<V>} array
347
352
  * @param {Element | Comment | Text} anchor
348
353
  * @param {number} flags
349
354
  * @param {(value: V, index: number) => any} get_key
350
355
  * @returns {void}
351
356
  */
352
- function reconcile(each_effect, array, state, anchor, flags, get_key) {
357
+ function reconcile(state, array, anchor, flags, get_key) {
353
358
  var is_animated = (flags & EACH_IS_ANIMATED) !== 0;
354
359
 
355
360
  var length = array.length;
@@ -536,16 +541,6 @@ function reconcile(each_effect, array, state, anchor, flags, get_key) {
536
541
  }
537
542
  });
538
543
  }
539
-
540
- // TODO i have an inkling that the rest of this function is wrong...
541
- // the offscreen items need to be linked, so that they all update correctly.
542
- // the last onscreen item should link to the first offscreen item, etc
543
- each_effect.first = state.first && state.first.e;
544
- each_effect.last = prev && prev.e;
545
-
546
- if (prev) {
547
- prev.e.next = null;
548
- }
549
544
  }
550
545
 
551
546
  /**
@@ -601,11 +596,11 @@ function create_item(anchor, prev, value, key, index, render_fn, flags, get_coll
601
596
 
602
597
  item.e = branch(() => render_fn(/** @type {Node} */ (anchor), v, i, get_collection));
603
598
 
604
- item.e.prev = prev && prev.e;
605
-
606
599
  if (prev !== null) {
600
+ // we only need to set `prev.next = item`, because
601
+ // `item.prev = prev` was set on initialization.
602
+ // the effects themselves are already linked
607
603
  prev.next = item;
608
- prev.e.next = item.e;
609
604
  }
610
605
 
611
606
  return item;
@@ -640,12 +635,23 @@ function move(item, next, anchor) {
640
635
  function link(state, prev, next) {
641
636
  if (prev === null) {
642
637
  state.first = next;
638
+ state.effect.first = next && next.e;
643
639
  } else {
640
+ if (prev.e.next) {
641
+ prev.e.next.prev = null;
642
+ }
643
+
644
644
  prev.next = next;
645
645
  prev.e.next = next && next.e;
646
646
  }
647
647
 
648
- if (next !== null) {
648
+ if (next === null) {
649
+ state.effect.last = prev && prev.e;
650
+ } else {
651
+ if (next.e.prev) {
652
+ next.e.prev.next = null;
653
+ }
654
+
649
655
  next.prev = prev;
650
656
  next.e.prev = prev && prev.e;
651
657
  }
package/src/version.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * The current version, as set in package.json.
5
5
  * @type {string}
6
6
  */
7
- export const VERSION = '5.43.11';
7
+ export const VERSION = '5.43.12';
8
8
  export const PUBLIC_VERSION = '5';