Skip to content

Commit f3510c8

Browse files
committed
Merge branch 'main' into fix-memory-leak-3
2 parents 1ade64e + 63456f1 commit f3510c8

18 files changed

Lines changed: 148 additions & 28 deletions

File tree

.changeset/itchy-eels-marry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: remove memory leak from bind:this

.changeset/lazy-knives-happen.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: make snippet effects transparent for transitions

.changeset/pre.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@
179179
"large-clouds-carry",
180180
"large-turkeys-deny",
181181
"late-crabs-lay",
182+
"late-grapes-judge",
182183
"late-peaches-mate",
184+
"lazy-knives-happen",
183185
"lazy-masks-sit",
184186
"lazy-months-knock",
185187
"lazy-spiders-think",
@@ -252,6 +254,7 @@
252254
"polite-pumpkins-guess",
253255
"polite-ravens-study",
254256
"poor-eggs-enjoy",
257+
"poor-hats-design",
255258
"poor-seahorses-flash",
256259
"popular-ligers-perform",
257260
"popular-mangos-rest",
@@ -410,6 +413,7 @@
410413
"unlucky-steaks-warn",
411414
"unlucky-trees-lick",
412415
"violet-pigs-jam",
416+
"weak-drinks-speak",
413417
"weak-terms-destroy",
414418
"wet-games-fly",
415419
"wet-wombats-repeat",

packages/svelte/CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# svelte
22

3+
## 5.0.0-next.106
4+
5+
### Patch Changes
6+
7+
- feat: use state proxy ancestry for ownership validation ([#11184](https://github.com/sveltejs/svelte/pull/11184))
8+
9+
- fix: make snippet effects transparent for transitions ([#11195](https://github.com/sveltejs/svelte/pull/11195))
10+
11+
- fix: return ast from `compile` (like Svelte 4 does) ([#11191](https://github.com/sveltejs/svelte/pull/11191))
12+
13+
- fix: ensure bind:this unmount behavior for members is conditional ([#11193](https://github.com/sveltejs/svelte/pull/11193))
14+
315
## 5.0.0-next.105
416

517
### Patch Changes

packages/svelte/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "svelte",
33
"description": "Cybernetically enhanced web apps",
44
"license": "MIT",
5-
"version": "5.0.0-next.105",
5+
"version": "5.0.0-next.106",
66
"type": "module",
77
"types": "./types/index.d.ts",
88
"engines": {

packages/svelte/src/compiler/phases/1-parse/state/tag.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ function special(parser) {
565565
type: 'VariableDeclaration',
566566
kind: 'const',
567567
declarations: [{ type: 'VariableDeclarator', id, init }],
568-
start: start + 1,
568+
start: start + 2, // start at const, not at @const
569569
end: parser.index - 1
570570
}
571571
});

packages/svelte/src/internal/client/constants.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ export const DIRTY = 1 << 9;
1010
export const MAYBE_DIRTY = 1 << 10;
1111
export const INERT = 1 << 11;
1212
export const DESTROYED = 1 << 12;
13-
export const IS_ELSEIF = 1 << 13;
14-
export const EFFECT_RAN = 1 << 14;
13+
export const EFFECT_RAN = 1 << 13;
14+
15+
/** 'Transparent' effects do not create a transition boundary */
16+
export const EFFECT_TRANSPARENT = 1 << 14;
1517

1618
export const STATE_SYMBOL = Symbol('$state');

packages/svelte/src/internal/client/dom/blocks/if.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IS_ELSEIF } from '../../constants.js';
1+
import { EFFECT_TRANSPARENT } from '../../constants.js';
22
import { hydrate_nodes, hydrating, set_hydrating } from '../hydration.js';
33
import { remove } from '../reconciler.js';
44
import { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js';
@@ -79,6 +79,6 @@ export function if_block(
7979
});
8080

8181
if (elseif) {
82-
effect.f |= IS_ELSEIF;
82+
effect.f |= EFFECT_TRANSPARENT;
8383
}
8484
}

packages/svelte/src/internal/client/dom/blocks/snippet.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { EFFECT_TRANSPARENT } from '../../constants.js';
12
import { branch, render_effect } from '../../reactivity/effects.js';
23

34
/**
@@ -11,11 +12,13 @@ export function snippet(get_snippet, node, ...args) {
1112
/** @type {SnippetFn | null | undefined} */
1213
var snippet;
1314

14-
render_effect(() => {
15+
var effect = render_effect(() => {
1516
if (snippet === (snippet = get_snippet())) return;
1617

1718
if (snippet) {
1819
branch(() => /** @type {SnippetFn} */ (snippet)(node, ...args));
1920
}
2021
});
22+
23+
effect.f |= EFFECT_TRANSPARENT;
2124
}

packages/svelte/src/internal/client/dom/elements/bindings/this.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { STATE_SYMBOL } from '../../../constants.js';
22
import { effect, render_effect } from '../../../reactivity/effects.js';
33
import { untrack } from '../../../runtime.js';
4+
import { queue_task } from '../../task.js';
45

56
/**
67
* @param {any} bound_value
@@ -47,7 +48,8 @@ export function bind_this(element_or_component, update, get_value, get_parts) {
4748
});
4849

4950
return () => {
50-
effect(() => {
51+
// We cannot use effects in the teardown phase, we we use a microtask instead.
52+
queue_task(() => {
5153
if (parts && is_bound_this(get_value(...parts), element_or_component)) {
5254
update(null, ...parts);
5355
}

0 commit comments

Comments
 (0)