diff --git a/benchmarking/compare/index.js b/benchmarking/compare/index.js
index 9d8d279c353a..8f38686a29d8 100644
--- a/benchmarking/compare/index.js
+++ b/benchmarking/compare/index.js
@@ -67,19 +67,29 @@ for (let i = 0; i < results[0].length; i += 1) {
for (const metric of ['time', 'gc_time']) {
const times = results.map((result) => +result[i][metric]);
let min = Infinity;
+ let max = -Infinity;
let min_index = -1;
for (let b = 0; b < times.length; b += 1) {
- if (times[b] < min) {
- min = times[b];
+ const time = times[b];
+
+ if (time < min) {
+ min = time;
min_index = b;
}
+
+ if (time > max) {
+ max = time;
+ }
}
if (min !== 0) {
- console.group(`${metric}: fastest is ${branches[min_index]}`);
+ console.group(`${metric}: fastest is ${char(min_index)} (${branches[min_index]})`);
times.forEach((time, b) => {
- console.log(`${branches[b]}: ${time.toFixed(2)}ms (${((time / min) * 100).toFixed(2)}%)`);
+ const SIZE = 20;
+ const n = Math.round(SIZE * (time / max));
+
+ console.log(`${char(b)}: ${'◼'.repeat(n)}${' '.repeat(SIZE - n)} ${time.toFixed(2)}ms`);
});
console.groupEnd();
}
@@ -87,3 +97,7 @@ for (let i = 0; i < results[0].length; i += 1) {
console.groupEnd();
}
+
+function char(i) {
+ return String.fromCharCode(97 + i);
+}
diff --git a/documentation/docs/02-runes/07-$inspect.md b/documentation/docs/02-runes/07-$inspect.md
index ff3d64757b6b..13ac8b79a33a 100644
--- a/documentation/docs/02-runes/07-$inspect.md
+++ b/documentation/docs/02-runes/07-$inspect.md
@@ -52,6 +52,7 @@ This rune, added in 5.14, causes the surrounding function to be _traced_ in deve
import { doSomeWork } from './elsewhere';
$effect(() => {
+ +++// $inspect.trace must be the first statement of a function body+++
+++$inspect.trace();+++
doSomeWork();
});
diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md
index 72cd00bc6abe..8650ba0e5b08 100644
--- a/packages/svelte/CHANGELOG.md
+++ b/packages/svelte/CHANGELOG.md
@@ -1,5 +1,15 @@
# svelte
+## 5.28.3
+
+### Patch Changes
+
+- chore: avoid microtasks when flushing sync ([#15895](https://github.com/sveltejs/svelte/pull/15895))
+
+- fix: improve error message for migration errors when slot would be renamed ([#15841](https://github.com/sveltejs/svelte/pull/15841))
+
+- fix: allow characters in the supplementary special-purpose plane ([#15823](https://github.com/sveltejs/svelte/pull/15823))
+
## 5.28.2
### Patch Changes
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index ff71429d2f9c..85eef9c2eb58 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.28.2",
+ "version": "5.28.3",
"type": "module",
"types": "./types/index.d.ts",
"engines": {
diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js
index 75a9a6490539..2d5a4dcd9e5d 100644
--- a/packages/svelte/src/compiler/migrate/index.js
+++ b/packages/svelte/src/compiler/migrate/index.js
@@ -1307,7 +1307,7 @@ const template = {
name = state.scope.generate(slot_name);
if (name !== slot_name) {
throw new MigrationError(
- 'This migration would change the name of a slot making the component unusable'
+ `This migration would change the name of a slot (${slot_name} to ${name}) making the component unusable`
);
}
}
@@ -1880,7 +1880,7 @@ function handle_identifier(node, state, path) {
let new_name = state.scope.generate(name);
if (new_name !== name) {
throw new MigrationError(
- 'This migration would change the name of a slot making the component unusable'
+ `This migration would change the name of a slot (${name} to ${new_name}) making the component unusable`
);
}
}
diff --git a/packages/svelte/src/compiler/phases/1-parse/utils/html.js b/packages/svelte/src/compiler/phases/1-parse/utils/html.js
index a68acb996faf..a0c2a5b06ffd 100644
--- a/packages/svelte/src/compiler/phases/1-parse/utils/html.js
+++ b/packages/svelte/src/compiler/phases/1-parse/utils/html.js
@@ -72,6 +72,8 @@ const NUL = 0;
// to replace them ourselves
//
// Source: http://en.wikipedia.org/wiki/Character_encodings_in_HTML#Illegal_characters
+// Also see: https://en.wikipedia.org/wiki/Plane_(Unicode)
+// Also see: https://html.spec.whatwg.org/multipage/parsing.html#preprocessing-the-input-stream
/** @param {number} code */
function validate_code(code) {
@@ -116,5 +118,10 @@ function validate_code(code) {
return code;
}
+ // supplementary special-purpose plane 0xe0000 - 0xe07f and 0xe0100 - 0xe01ef
+ if ((code >= 917504 && code <= 917631) || (code >= 917760 && code <= 917999)) {
+ return code;
+ }
+
return NUL;
}
diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js
index 7a926bf62457..2375dc0a630a 100644
--- a/packages/svelte/src/internal/client/runtime.js
+++ b/packages/svelte/src/internal/client/runtime.js
@@ -823,6 +823,8 @@ export function flushSync(fn) {
if (fn) {
is_flushing = true;
flush_queued_root_effects();
+
+ is_flushing = true;
result = fn();
}
diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js
index a3a9979d6546..b072c6432c25 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.28.2';
+export const VERSION = '5.28.3';
export const PUBLIC_VERSION = '5';
diff --git a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte
index 9e4f086aedd3..26012e11151d 100644
--- a/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte
+++ b/packages/svelte/tests/migrate/samples/impossible-migrate-$derived-derived-var-3/output.svelte
@@ -1,7 +1,7 @@
-
+
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: