diff --git a/documentation/docs/03-template-syntax/09-@const.md b/documentation/docs/03-template-syntax/09-@const.md
index c42d3560fd0e..2a587b7a3d7c 100644
--- a/documentation/docs/03-template-syntax/09-@const.md
+++ b/documentation/docs/03-template-syntax/09-@const.md
@@ -11,4 +11,4 @@ The `{@const ...}` tag defines a local constant.
{/each}
```
-`{@const}` is only allowed as an immediate child of a block — `{#if ...}`, `{#each ...}`, `{#snippet ...}` and so on — a ` ` or a ` ` or a ``.
diff --git a/documentation/docs/03-template-syntax/11-bind.md b/documentation/docs/03-template-syntax/11-bind.md
index 90046c8c456d..119f87ed8eb5 100644
--- a/documentation/docs/03-template-syntax/11-bind.md
+++ b/documentation/docs/03-template-syntax/11-bind.md
@@ -219,11 +219,10 @@ You can give the `` a default value by adding a `selected` attribute to
- [`volume`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/volume)
- [`muted`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/muted)
-...and seven readonly ones:
+...and six readonly ones:
- [`duration`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/duration)
- [`buffered`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered)
-- [`paused`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/paused)
- [`seekable`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable)
- [`seeking`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeking_event)
- [`ended`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/ended)
@@ -235,7 +234,7 @@ You can give the `` a default value by adding a `selected` attribute to
## ``
-`` elements have all the same bindings as [#audio] elements, plus readonly [`videoWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoWidth) and [`videoHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoHeight) bindings.
+`` elements have all the same bindings as [``](#audio) elements, plus readonly [`videoWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoWidth) and [`videoHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoHeight) bindings.
## ` `
diff --git a/documentation/docs/04-styling/01-scoped-styles.md b/documentation/docs/04-styling/01-scoped-styles.md
index f870d0a5b83c..eae26d0cb1ca 100644
--- a/documentation/docs/04-styling/01-scoped-styles.md
+++ b/documentation/docs/04-styling/01-scoped-styles.md
@@ -33,10 +33,7 @@ If a component defines `@keyframes`, the name is scoped to the component using t
/* these keyframes are only accessible inside this component */
@keyframes bounce {
- /* ... *.
+ /* ... */
}
```
-
-
-
diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md
index 0e8073cc5db0..9ebd37aadf28 100644
--- a/packages/svelte/CHANGELOG.md
+++ b/packages/svelte/CHANGELOG.md
@@ -1,5 +1,13 @@
# svelte
+## 5.19.7
+
+### Patch Changes
+
+- chore: remove unused code from signal logic ([#15195](https://github.com/sveltejs/svelte/pull/15195))
+
+- fix: encounter svelte:element in blocks as sibling during pruning css ([#15165](https://github.com/sveltejs/svelte/pull/15165))
+
## 5.19.6
### Patch Changes
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index a286fa119d05..8ea495af99d8 100644
--- a/packages/svelte/package.json
+++ b/packages/svelte/package.json
@@ -2,7 +2,7 @@
"name": "svelte",
"description": "Cybernetically enhanced web apps",
"license": "MIT",
- "version": "5.19.6",
+ "version": "5.19.7",
"type": "module",
"types": "./types/index.d.ts",
"engines": {
diff --git a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js
index e719895798e1..fc8108e46e8e 100644
--- a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js
+++ b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js
@@ -933,11 +933,9 @@ function get_possible_element_siblings(node, adjacent_only, seen = new Set()) {
/**
* @param {Compiler.AST.EachBlock | Compiler.AST.IfBlock | Compiler.AST.AwaitBlock | Compiler.AST.KeyBlock | Compiler.AST.SlotElement} node
* @param {boolean} adjacent_only
- * @returns {Map}
+ * @returns {Map}
*/
function get_possible_last_child(node, adjacent_only) {
- /** @typedef {Map} NodeMap */
-
/** @type {Array} */
let fragments = [];
@@ -960,7 +958,7 @@ function get_possible_last_child(node, adjacent_only) {
break;
}
- /** @type {NodeMap} */
+ /** @type {Map} NodeMap */
const result = new Map();
let exhaustive = node.type !== 'SlotElement';
@@ -1001,9 +999,10 @@ function has_definite_elements(result) {
}
/**
- * @template T
- * @param {Map} from
- * @param {Map} to
+ * @template T2
+ * @template {T2} T1
+ * @param {Map} from
+ * @param {Map} to
* @returns {void}
*/
function add_to_map(from, to) {
@@ -1028,7 +1027,7 @@ function higher_existence(exist1, exist2) {
* @param {boolean} adjacent_only
*/
function loop_child(children, adjacent_only) {
- /** @type {Map} */
+ /** @type {Map} */
const result = new Map();
let i = children.length;
@@ -1041,6 +1040,8 @@ function loop_child(children, adjacent_only) {
if (adjacent_only) {
break;
}
+ } else if (child.type === 'SvelteElement') {
+ result.set(child, NODE_PROBABLY_EXISTS);
} else if (is_block(child)) {
const child_result = get_possible_last_child(child, adjacent_only);
add_to_map(child_result, result);
diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js
index 1f65ff38c351..60b55970e6b3 100644
--- a/packages/svelte/src/internal/client/reactivity/deriveds.js
+++ b/packages/svelte/src/internal/client/reactivity/deriveds.js
@@ -176,15 +176,3 @@ export function update_derived(derived) {
derived.wv = increment_write_version();
}
}
-
-/**
- * @param {Derived} derived
- * @returns {void}
- */
-export function destroy_derived(derived) {
- destroy_derived_effects(derived);
- remove_reactions(derived, 0);
- set_signal_status(derived, DESTROYED);
-
- derived.v = derived.deps = derived.ctx = derived.reactions = null;
-}
diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js
index d014ff793dea..eab6c767f868 100644
--- a/packages/svelte/src/internal/client/reactivity/effects.js
+++ b/packages/svelte/src/internal/client/reactivity/effects.js
@@ -42,7 +42,7 @@ import * as e from '../errors.js';
import { DEV } from 'esm-env';
import { define_property } from '../../shared/utils.js';
import { get_next_sibling } from '../dom/operations.js';
-import { derived, destroy_derived } from './deriveds.js';
+import { derived } from './deriveds.js';
import { component_context, dev_current_component_function } from '../context.js';
/**
diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js
index bc74047f6497..3256fe827410 100644
--- a/packages/svelte/src/internal/client/render.js
+++ b/packages/svelte/src/internal/client/render.js
@@ -55,7 +55,7 @@ export function set_text(text, value) {
if (str !== (text.__t ??= text.nodeValue)) {
// @ts-expect-error
text.__t = str;
- text.nodeValue = str == null ? '' : str + '';
+ text.nodeValue = str + '';
}
}
diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js
index a572e27bf467..57cefccc01c6 100644
--- a/packages/svelte/src/internal/client/runtime.js
+++ b/packages/svelte/src/internal/client/runtime.js
@@ -27,12 +27,7 @@ import {
} from './constants.js';
import { flush_tasks } from './dom/task.js';
import { internal_set } from './reactivity/sources.js';
-import {
- destroy_derived,
- destroy_derived_effects,
- execute_derived,
- update_derived
-} from './reactivity/deriveds.js';
+import { destroy_derived_effects, update_derived } from './reactivity/deriveds.js';
import * as e from './errors.js';
import { FILENAME } from '../../constants.js';
import { tracing_mode_flag } from '../flags/index.js';
@@ -919,15 +914,6 @@ export function get(signal) {
var flags = signal.f;
var is_derived = (flags & DERIVED) !== 0;
- // If the derived is destroyed, just execute it again without retaining
- // its memoisation properties as the derived is stale
- if (is_derived && (flags & DESTROYED) !== 0) {
- var value = execute_derived(/** @type {Derived} */ (signal));
- // Ensure the derived remains destroyed
- destroy_derived(/** @type {Derived} */ (signal));
- return value;
- }
-
if (captured_signals !== null) {
captured_signals.add(signal);
}
diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js
index 03ab37b58343..d3c6e6b32199 100644
--- a/packages/svelte/src/version.js
+++ b/packages/svelte/src/version.js
@@ -4,5 +4,5 @@
* The current version, as set in package.json.
* @type {string}
*/
-export const VERSION = '5.19.6';
+export const VERSION = '5.19.7';
export const PUBLIC_VERSION = '5';
diff --git a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/_config.js b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/_config.js
index 7c50a76bbbd8..a7d6c3a99d3d 100644
--- a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/_config.js
+++ b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/_config.js
@@ -5,15 +5,15 @@ export default test({
{
code: 'css_unused_selector',
end: {
- character: 496,
+ character: 627,
column: 10,
- line: 26
+ line: 32
},
message: 'Unused CSS selector ".x + .bar"',
start: {
- character: 487,
+ character: 618,
column: 1,
- line: 26
+ line: 32
}
}
]
diff --git a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/expected.css b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/expected.css
index 830d3667024b..d3fa8c97d2e1 100644
--- a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/expected.css
+++ b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/expected.css
@@ -9,5 +9,8 @@
.x.svelte-xyz ~ .foo:where(.svelte-xyz) span:where(.svelte-xyz) { color: green; }
.x.svelte-xyz ~ .bar:where(.svelte-xyz) { color: green; }
+ .z.svelte-xyz + .z:where(.svelte-xyz) { color: green; }
+ .z.svelte-xyz ~ .z:where(.svelte-xyz) { color: green; }
+
/* no match */
/* (unused) .x + .bar { color: green; }*/
diff --git a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/input.svelte b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/input.svelte
index 1c51a2c516a1..655fd861539a 100644
--- a/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/input.svelte
+++ b/packages/svelte/tests/css/samples/general-siblings-combinator-svelteelement/input.svelte
@@ -10,6 +10,9 @@
bar
+{#each [1]}
+
+{/each}
diff --git a/playgrounds/sandbox/run.js b/playgrounds/sandbox/run.js
index 771dcc668eed..4cb831453233 100644
--- a/playgrounds/sandbox/run.js
+++ b/playgrounds/sandbox/run.js
@@ -26,6 +26,15 @@ function mkdirp(dir) {
} catch {}
}
+/**
+ * @param {string} file
+ * @param {string} contents
+ */
+function write(file, contents) {
+ mkdirp(path.dirname(file));
+ fs.writeFileSync(file, contents);
+}
+
const svelte_modules = glob('**/*.svelte', { cwd: `${cwd}/src` });
const js_modules = glob('**/*.js', { cwd: `${cwd}/src` });
@@ -46,7 +55,7 @@ for (const generate of /** @type {const} */ (['client', 'server'])) {
modern: true
});
- fs.writeFileSync(
+ write(
`${cwd}/output/${file}.json`,
JSON.stringify(
ast,
@@ -57,7 +66,7 @@ for (const generate of /** @type {const} */ (['client', 'server'])) {
try {
const migrated = migrate(source);
- fs.writeFileSync(`${cwd}/output/${file}.migrated.svelte`, migrated.code);
+ write(`${cwd}/output/${file}.migrated.svelte`, migrated.code);
} catch (e) {
console.warn(`Error migrating ${file}`, e);
}
@@ -75,15 +84,12 @@ for (const generate of /** @type {const} */ (['client', 'server'])) {
console.warn(warning.frame);
}
- fs.writeFileSync(
- output_js,
- compiled.js.code + '\n//# sourceMappingURL=' + path.basename(output_map)
- );
+ write(output_js, compiled.js.code + '\n//# sourceMappingURL=' + path.basename(output_map));
- fs.writeFileSync(output_map, compiled.js.map.toString());
+ write(output_map, compiled.js.map.toString());
if (compiled.css) {
- fs.writeFileSync(output_css, compiled.css.code);
+ write(output_css, compiled.css.code);
}
}
@@ -100,6 +106,6 @@ for (const generate of /** @type {const} */ (['client', 'server'])) {
const output_js = `${cwd}/output/${generate}/${file}`;
mkdirp(path.dirname(output_js));
- fs.writeFileSync(output_js, compiled.js.code);
+ write(output_js, compiled.js.code);
}
}
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy