` might be more appropriate
Enforce that visible, non-interactive elements with an `onclick` event are accompanied by a keyboard event handler.
diff --git a/packages/svelte/package.json b/packages/svelte/package.json
index 83f2ae6dc2..8478e47115 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.15.0",
+ "version": "5.17.4",
"type": "module",
"types": "./types/index.d.ts",
"engines": {
@@ -157,8 +157,9 @@
"acorn-typescript": "^1.4.13",
"aria-query": "^5.3.1",
"axobject-query": "^4.1.0",
+ "clsx": "^2.1.1",
"esm-env": "^1.2.1",
- "esrap": "^1.3.2",
+ "esrap": "^1.4.2",
"is-reference": "^3.0.3",
"locate-character": "^3.0.0",
"magic-string": "^0.30.11",
diff --git a/packages/svelte/scripts/generate-version.js b/packages/svelte/scripts/generate-version.js
index 1c392efef4..3eeeb437dd 100644
--- a/packages/svelte/scripts/generate-version.js
+++ b/packages/svelte/scripts/generate-version.js
@@ -8,8 +8,6 @@ fs.writeFileSync(
/**
* The current version, as set in package.json.
- *
- * https://svelte.dev/docs/svelte-compiler#svelte-version
* @type {string}
*/
export const VERSION = '${pkg.version}';
diff --git a/packages/svelte/src/ambient.d.ts b/packages/svelte/src/ambient.d.ts
index 9dbc61c7cb..fbcecba8e4 100644
--- a/packages/svelte/src/ambient.d.ts
+++ b/packages/svelte/src/ambient.d.ts
@@ -433,7 +433,7 @@ declare namespace $inspect {
* });
*
*/
- export function trace(name: string): void;
+ export function trace(name?: string): void;
// prevent intellisense from being unhelpful
/** @deprecated */
diff --git a/packages/svelte/src/animate/index.js b/packages/svelte/src/animate/index.js
index fbf2ac83e2..2ce7708bc7 100644
--- a/packages/svelte/src/animate/index.js
+++ b/packages/svelte/src/animate/index.js
@@ -11,18 +11,37 @@ import { cubicOut } from '../easing/index.js';
* @returns {AnimationConfig}
*/
export function flip(node, { from, to }, params = {}) {
+ var { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;
+
var style = getComputedStyle(node);
- var zoom = get_zoom(node); // https://drafts.csswg.org/css-viewport/#effective-zoom
+ // find the transform origin, expressed as a pair of values between 0 and 1
var transform = style.transform === 'none' ? '' : style.transform;
var [ox, oy] = style.transformOrigin.split(' ').map(parseFloat);
+ ox /= node.clientWidth;
+ oy /= node.clientHeight;
+
+ // calculate effect of parent transforms and zoom
+ var zoom = get_zoom(node); // https://drafts.csswg.org/css-viewport/#effective-zoom
+ var sx = node.clientWidth / to.width / zoom;
+ var sy = node.clientHeight / to.height / zoom;
+
+ // find the starting position of the transform origin
+ var fx = from.left + from.width * ox;
+ var fy = from.top + from.height * oy;
+
+ // find the ending position of the transform origin
+ var tx = to.left + to.width * ox;
+ var ty = to.top + to.height * oy;
+
+ // find the translation at the start of the transform
+ var dx = (fx - tx) * sx;
+ var dy = (fy - ty) * sy;
+
+ // find the relative scale at the start of the transform
var dsx = from.width / to.width;
var dsy = from.height / to.height;
- var dx = (from.left + dsx * ox - (to.left + ox)) / zoom;
- var dy = (from.top + dsy * oy - (to.top + oy)) / zoom;
- var { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;
-
return {
delay,
duration: typeof duration === 'function' ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,
@@ -32,7 +51,8 @@ export function flip(node, { from, to }, params = {}) {
var y = u * dy;
var sx = t + u * dsx;
var sy = t + u * dsy;
- return `transform: ${transform} scale(${sx}, ${sy}) translate(${x}px, ${y}px);`;
+
+ return `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;
}
};
}
diff --git a/packages/svelte/src/compiler/errors.js b/packages/svelte/src/compiler/errors.js
index 9ea13e811e..da038af430 100644
--- a/packages/svelte/src/compiler/errors.js
+++ b/packages/svelte/src/compiler/errors.js
@@ -52,7 +52,7 @@ function e(node, code, message) {
* @returns {never}
*/
export function options_invalid_value(node, details) {
- e(node, "options_invalid_value", `Invalid compiler option: ${details}\nhttps://svelte.dev/e/options_invalid_value`);
+ e(node, 'options_invalid_value', `Invalid compiler option: ${details}\nhttps://svelte.dev/e/options_invalid_value`);
}
/**
@@ -62,7 +62,7 @@ export function options_invalid_value(node, details) {
* @returns {never}
*/
export function options_removed(node, details) {
- e(node, "options_removed", `Invalid compiler option: ${details}\nhttps://svelte.dev/e/options_removed`);
+ e(node, 'options_removed', `Invalid compiler option: ${details}\nhttps://svelte.dev/e/options_removed`);
}
/**
@@ -72,7 +72,7 @@ export function options_removed(node, details) {
* @returns {never}
*/
export function options_unrecognised(node, keypath) {
- e(node, "options_unrecognised", `Unrecognised compiler option ${keypath}\nhttps://svelte.dev/e/options_unrecognised`);
+ e(node, 'options_unrecognised', `Unrecognised compiler option ${keypath}\nhttps://svelte.dev/e/options_unrecognised`);
}
/**
@@ -81,7 +81,7 @@ export function options_unrecognised(node, keypath) {
* @returns {never}
*/
export function bindable_invalid_location(node) {
- e(node, "bindable_invalid_location", `\`$bindable()\` can only be used inside a \`$props()\` declaration\nhttps://svelte.dev/e/bindable_invalid_location`);
+ e(node, 'bindable_invalid_location', `\`$bindable()\` can only be used inside a \`$props()\` declaration\nhttps://svelte.dev/e/bindable_invalid_location`);
}
/**
@@ -91,7 +91,7 @@ export function bindable_invalid_location(node) {
* @returns {never}
*/
export function constant_assignment(node, thing) {
- e(node, "constant_assignment", `Cannot assign to ${thing}\nhttps://svelte.dev/e/constant_assignment`);
+ e(node, 'constant_assignment', `Cannot assign to ${thing}\nhttps://svelte.dev/e/constant_assignment`);
}
/**
@@ -101,7 +101,7 @@ export function constant_assignment(node, thing) {
* @returns {never}
*/
export function constant_binding(node, thing) {
- e(node, "constant_binding", `Cannot bind to ${thing}\nhttps://svelte.dev/e/constant_binding`);
+ e(node, 'constant_binding', `Cannot bind to ${thing}\nhttps://svelte.dev/e/constant_binding`);
}
/**
@@ -111,7 +111,7 @@ export function constant_binding(node, thing) {
* @returns {never}
*/
export function declaration_duplicate(node, name) {
- e(node, "declaration_duplicate", `\`${name}\` has already been declared\nhttps://svelte.dev/e/declaration_duplicate`);
+ e(node, 'declaration_duplicate', `\`${name}\` has already been declared\nhttps://svelte.dev/e/declaration_duplicate`);
}
/**
@@ -120,7 +120,7 @@ export function declaration_duplicate(node, name) {
* @returns {never}
*/
export function declaration_duplicate_module_import(node) {
- e(node, "declaration_duplicate_module_import", `Cannot declare a variable with the same name as an import inside \`
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-1/expected.css b/packages/svelte/tests/css/samples/clsx-cannot-prune-1/expected.css
new file mode 100644
index 0000000000..243bdb2b82
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-1/expected.css
@@ -0,0 +1,2 @@
+
+ .x.svelte-xyz { color: green; }
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-1/input.svelte b/packages/svelte/tests/css/samples/clsx-cannot-prune-1/input.svelte
new file mode 100644
index 0000000000..d9de0bdfd4
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-1/input.svelte
@@ -0,0 +1,5 @@
+hello world
+
+
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-2/expected.css b/packages/svelte/tests/css/samples/clsx-cannot-prune-2/expected.css
new file mode 100644
index 0000000000..243bdb2b82
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-2/expected.css
@@ -0,0 +1,2 @@
+
+ .x.svelte-xyz { color: green; }
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-2/input.svelte b/packages/svelte/tests/css/samples/clsx-cannot-prune-2/input.svelte
new file mode 100644
index 0000000000..212deab4f0
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-2/input.svelte
@@ -0,0 +1,5 @@
+hello world
+
+
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-3/expected.css b/packages/svelte/tests/css/samples/clsx-cannot-prune-3/expected.css
new file mode 100644
index 0000000000..243bdb2b82
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-3/expected.css
@@ -0,0 +1,2 @@
+
+ .x.svelte-xyz { color: green; }
diff --git a/packages/svelte/tests/css/samples/clsx-cannot-prune-3/input.svelte b/packages/svelte/tests/css/samples/clsx-cannot-prune-3/input.svelte
new file mode 100644
index 0000000000..2dfa1afd18
--- /dev/null
+++ b/packages/svelte/tests/css/samples/clsx-cannot-prune-3/input.svelte
@@ -0,0 +1,5 @@
+hello world
+
+
diff --git a/packages/svelte/tests/css/samples/global-block/expected.css b/packages/svelte/tests/css/samples/global-block/expected.css
index 8a7c493d7c..438749224b 100644
--- a/packages/svelte/tests/css/samples/global-block/expected.css
+++ b/packages/svelte/tests/css/samples/global-block/expected.css
@@ -74,6 +74,10 @@
animation: svelte-xyz-test 1s;
}
+ .y{
+ animation: test-in 1s;
+ }
+
@keyframes test-in{
to{
opacity: 1;
diff --git a/packages/svelte/tests/css/samples/global-block/input.svelte b/packages/svelte/tests/css/samples/global-block/input.svelte
index dc1a754010..a1833636a1 100644
--- a/packages/svelte/tests/css/samples/global-block/input.svelte
+++ b/packages/svelte/tests/css/samples/global-block/input.svelte
@@ -76,6 +76,10 @@
animation: test 1s;
}
+ .y{
+ animation: test-in 1s;
+ }
+
@keyframes test-in{
to{
opacity: 1;
diff --git a/packages/svelte/tests/hydration/samples/pre-first-node-newline/_config.js b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_config.js
new file mode 100644
index 0000000000..c838aab749
--- /dev/null
+++ b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_config.js
@@ -0,0 +1,5 @@
+import { test } from '../../test';
+
+// A note about _expected.html: It is different from body.html because we're
+// testing against target.innerHTML which already removed the redundant first newline
+export default test({});
diff --git a/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html
new file mode 100644
index 0000000000..26de34d1ed
--- /dev/null
+++ b/packages/svelte/tests/hydration/samples/pre-first-node-newline/_expected.html
@@ -0,0 +1,7 @@
+static content no line static content ignored line
+
+ static content relevant line
+
+
+
+
diff --git a/packages/svelte/tests/hydration/samples/pre-first-node-newline/main.svelte b/packages/svelte/tests/hydration/samples/pre-first-node-newline/main.svelte
new file mode 100644
index 0000000000..9764b49e99
--- /dev/null
+++ b/packages/svelte/tests/hydration/samples/pre-first-node-newline/main.svelte
@@ -0,0 +1,23 @@
+
+
+static content no line
+
+
+ static content ignored line
+
+
+
+
+ static content relevant line
+
+
+
+{name}
+
+
+
+
+{name}
+
diff --git a/packages/svelte/tests/motion/test.ts b/packages/svelte/tests/motion/test.ts
index b6554e5e56..7d0403983a 100644
--- a/packages/svelte/tests/motion/test.ts
+++ b/packages/svelte/tests/motion/test.ts
@@ -2,7 +2,8 @@
import '../helpers.js'; // for the matchMedia polyfill
import { describe, it, assert } from 'vitest';
import { get } from 'svelte/store';
-import { spring, tweened } from 'svelte/motion';
+import { spring, tweened, Tween } from 'svelte/motion';
+import { raf } from '../animation-helpers.js';
describe('motion', () => {
describe('spring', () => {
@@ -38,5 +39,41 @@ describe('motion', () => {
size.update((v) => v + 10);
assert.equal(get(size), 20);
});
+
+ it('updates non-numeric values immediately', () => {
+ raf.reset();
+ const boolean = tweened(false);
+
+ boolean.set(true, { duration: 100 });
+
+ raf.tick(1);
+ assert.equal(get(boolean), true);
+ });
+ });
+
+ describe('Tween', () => {
+ it('sets immediately when duration is 0', () => {
+ const size = new Tween(0);
+
+ size.set(100, { duration: 0 });
+ assert.equal(size.current, 100);
+ });
+
+ it('updates non-numeric values immediately', () => {
+ raf.reset();
+ const boolean = new Tween(false);
+
+ boolean.set(true, { duration: 100 });
+
+ raf.tick(1);
+ assert.equal(boolean.current, true);
+ });
+ });
+
+ it('updates correctly when initialized with a `null`-ish value', () => {
+ const size = new Tween(undefined as unknown as number, { duration: 0 });
+
+ size.set(10);
+ assert.equal(size.current, 10);
});
});
diff --git a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/input.svelte b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/input.svelte
new file mode 100644
index 0000000000..bc83f8e57f
--- /dev/null
+++ b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/input.svelte
@@ -0,0 +1,9 @@
+{#each x as { y = 'z' }}{/each}
+
+{#each x as { y = '{' }}{/each}
+
+{#each x as { y = ']' }}{/each}
+
+{#each x as { y = `${`"`}` }}{/each}
+
+{#each x as { y = `${`John`}` }}{/each}
diff --git a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/output.json b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/output.json
new file mode 100644
index 0000000000..b962db3226
--- /dev/null
+++ b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern-special-characters/output.json
@@ -0,0 +1,826 @@
+{
+ "css": null,
+ "js": [],
+ "start": 0,
+ "end": 176,
+ "type": "Root",
+ "fragment": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "EachBlock",
+ "start": 0,
+ "end": 31,
+ "expression": {
+ "type": "Identifier",
+ "start": 7,
+ "end": 8,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 7
+ },
+ "end": {
+ "line": 1,
+ "column": 8
+ }
+ },
+ "name": "x"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": []
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 12,
+ "end": 23,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 12
+ },
+ "end": {
+ "line": 1,
+ "column": 23
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 14,
+ "end": 21,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 14
+ },
+ "end": {
+ "line": 1,
+ "column": 21
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 14,
+ "end": 15,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 14
+ },
+ "end": {
+ "line": 1,
+ "column": 15
+ }
+ },
+ "name": "y"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 14,
+ "end": 21,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 14
+ },
+ "end": {
+ "line": 1,
+ "column": 21
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 14,
+ "end": 15,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 14
+ },
+ "end": {
+ "line": 1,
+ "column": 15
+ }
+ },
+ "name": "y"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 18,
+ "end": 21,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 18
+ },
+ "end": {
+ "line": 1,
+ "column": 21
+ }
+ },
+ "value": "z",
+ "raw": "'z'"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 31,
+ "end": 33,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 33,
+ "end": 64,
+ "expression": {
+ "type": "Identifier",
+ "start": 40,
+ "end": 41,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 7
+ },
+ "end": {
+ "line": 3,
+ "column": 8
+ }
+ },
+ "name": "x"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": []
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 45,
+ "end": 56,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 13
+ },
+ "end": {
+ "line": 3,
+ "column": 24
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 47,
+ "end": 54,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 15
+ },
+ "end": {
+ "line": 3,
+ "column": 22
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 47,
+ "end": 48,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 15
+ },
+ "end": {
+ "line": 3,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 47,
+ "end": 54,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 15
+ },
+ "end": {
+ "line": 3,
+ "column": 22
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 47,
+ "end": 48,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 15
+ },
+ "end": {
+ "line": 3,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 51,
+ "end": 54,
+ "loc": {
+ "start": {
+ "line": 3,
+ "column": 19
+ },
+ "end": {
+ "line": 3,
+ "column": 22
+ }
+ },
+ "value": "{",
+ "raw": "'{'"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 64,
+ "end": 66,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 66,
+ "end": 97,
+ "expression": {
+ "type": "Identifier",
+ "start": 73,
+ "end": 74,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 7
+ },
+ "end": {
+ "line": 5,
+ "column": 8
+ }
+ },
+ "name": "x"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": []
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 78,
+ "end": 89,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 13
+ },
+ "end": {
+ "line": 5,
+ "column": 24
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 80,
+ "end": 87,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 15
+ },
+ "end": {
+ "line": 5,
+ "column": 22
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 80,
+ "end": 81,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 15
+ },
+ "end": {
+ "line": 5,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 80,
+ "end": 87,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 15
+ },
+ "end": {
+ "line": 5,
+ "column": 22
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 80,
+ "end": 81,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 15
+ },
+ "end": {
+ "line": 5,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 84,
+ "end": 87,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 19
+ },
+ "end": {
+ "line": 5,
+ "column": 22
+ }
+ },
+ "value": "]",
+ "raw": "']'"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 97,
+ "end": 99,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 99,
+ "end": 135,
+ "expression": {
+ "type": "Identifier",
+ "start": 106,
+ "end": 107,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 7
+ },
+ "end": {
+ "line": 7,
+ "column": 8
+ }
+ },
+ "name": "x"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": []
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 111,
+ "end": 127,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 13
+ },
+ "end": {
+ "line": 7,
+ "column": 29
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 113,
+ "end": 125,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 15
+ },
+ "end": {
+ "line": 7,
+ "column": 27
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 113,
+ "end": 114,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 15
+ },
+ "end": {
+ "line": 7,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 113,
+ "end": 125,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 15
+ },
+ "end": {
+ "line": 7,
+ "column": 27
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 113,
+ "end": 114,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 15
+ },
+ "end": {
+ "line": 7,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "right": {
+ "type": "TemplateLiteral",
+ "start": 117,
+ "end": 125,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 19
+ },
+ "end": {
+ "line": 7,
+ "column": 27
+ }
+ },
+ "expressions": [
+ {
+ "type": "TemplateLiteral",
+ "start": 120,
+ "end": 123,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 22
+ },
+ "end": {
+ "line": 7,
+ "column": 25
+ }
+ },
+ "expressions": [],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 121,
+ "end": 122,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 23
+ },
+ "end": {
+ "line": 7,
+ "column": 24
+ }
+ },
+ "value": {
+ "raw": "\"",
+ "cooked": "\""
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 118,
+ "end": 118,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 20
+ },
+ "end": {
+ "line": 7,
+ "column": 20
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 124,
+ "end": 124,
+ "loc": {
+ "start": {
+ "line": 7,
+ "column": 26
+ },
+ "end": {
+ "line": 7,
+ "column": 26
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 135,
+ "end": 137,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 137,
+ "end": 176,
+ "expression": {
+ "type": "Identifier",
+ "start": 144,
+ "end": 145,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 7
+ },
+ "end": {
+ "line": 9,
+ "column": 8
+ }
+ },
+ "name": "x"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": []
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 149,
+ "end": 168,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 13
+ },
+ "end": {
+ "line": 9,
+ "column": 32
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 151,
+ "end": 166,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 15
+ },
+ "end": {
+ "line": 9,
+ "column": 30
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 151,
+ "end": 152,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 15
+ },
+ "end": {
+ "line": 9,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 151,
+ "end": 166,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 15
+ },
+ "end": {
+ "line": 9,
+ "column": 30
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 151,
+ "end": 152,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 15
+ },
+ "end": {
+ "line": 9,
+ "column": 16
+ }
+ },
+ "name": "y"
+ },
+ "right": {
+ "type": "TemplateLiteral",
+ "start": 155,
+ "end": 166,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 19
+ },
+ "end": {
+ "line": 9,
+ "column": 30
+ }
+ },
+ "expressions": [
+ {
+ "type": "TemplateLiteral",
+ "start": 158,
+ "end": 164,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 22
+ },
+ "end": {
+ "line": 9,
+ "column": 28
+ }
+ },
+ "expressions": [],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 159,
+ "end": 163,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 23
+ },
+ "end": {
+ "line": 9,
+ "column": 27
+ }
+ },
+ "value": {
+ "raw": "John",
+ "cooked": "John"
+ },
+ "tail": true
+ }
+ ]
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 156,
+ "end": 156,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 20
+ },
+ "end": {
+ "line": 9,
+ "column": 20
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 165,
+ "end": 165,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 29
+ },
+ "end": {
+ "line": 9,
+ "column": 29
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "options": null
+}
diff --git a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/input.svelte b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/input.svelte
index 8ffe8a7287..c3bfdb46a6 100644
--- a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/input.svelte
+++ b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/input.svelte
@@ -1,3 +1,11 @@
{#each people as { name, cool = true }}
{name} is {cool ? 'cool' : 'not cool'}
{/each}
+
+{#each people as { name = `Jane ${"Doe"}`, cool = true }}
+ {name} is {cool ? 'cool' : 'not cool'}
+{/each}
+
+{#each people as { name = (() => { return `Jane ${"Doe"}`; })(), cool = true }}
+ {name} is {cool ? 'cool' : 'not cool'}
+{/each}
diff --git a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/output.json b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/output.json
index 8fc3feb916..144016417b 100644
--- a/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/output.json
+++ b/packages/svelte/tests/parser-modern/samples/each-block-object-pattern/output.json
@@ -2,7 +2,7 @@
"css": null,
"js": [],
"start": 0,
- "end": 94,
+ "end": 344,
"type": "Root",
"fragment": {
"type": "Fragment",
@@ -307,6 +307,873 @@
}
]
}
+ },
+ {
+ "type": "Text",
+ "start": 94,
+ "end": 96,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 96,
+ "end": 208,
+ "expression": {
+ "type": "Identifier",
+ "start": 103,
+ "end": 109,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 7
+ },
+ "end": {
+ "line": 5,
+ "column": 13
+ }
+ },
+ "name": "people"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "Text",
+ "start": 153,
+ "end": 155,
+ "raw": "\n\t",
+ "data": "\n\t"
+ },
+ {
+ "type": "RegularElement",
+ "start": 155,
+ "end": 200,
+ "name": "p",
+ "attributes": [],
+ "fragment": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "ExpressionTag",
+ "start": 158,
+ "end": 164,
+ "expression": {
+ "type": "Identifier",
+ "start": 159,
+ "end": 163,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 5
+ },
+ "end": {
+ "line": 6,
+ "column": 9
+ }
+ },
+ "name": "name"
+ }
+ },
+ {
+ "type": "Text",
+ "start": 164,
+ "end": 168,
+ "raw": " is ",
+ "data": " is "
+ },
+ {
+ "type": "ExpressionTag",
+ "start": 168,
+ "end": 196,
+ "expression": {
+ "type": "ConditionalExpression",
+ "start": 169,
+ "end": 195,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 15
+ },
+ "end": {
+ "line": 6,
+ "column": 41
+ }
+ },
+ "test": {
+ "type": "Identifier",
+ "start": 169,
+ "end": 173,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 15
+ },
+ "end": {
+ "line": 6,
+ "column": 19
+ }
+ },
+ "name": "cool"
+ },
+ "consequent": {
+ "type": "Literal",
+ "start": 176,
+ "end": 182,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 22
+ },
+ "end": {
+ "line": 6,
+ "column": 28
+ }
+ },
+ "value": "cool",
+ "raw": "'cool'"
+ },
+ "alternate": {
+ "type": "Literal",
+ "start": 185,
+ "end": 195,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 31
+ },
+ "end": {
+ "line": 6,
+ "column": 41
+ }
+ },
+ "value": "not cool",
+ "raw": "'not cool'"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 200,
+ "end": 201,
+ "raw": "\n",
+ "data": "\n"
+ }
+ ]
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 113,
+ "end": 152,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 18
+ },
+ "end": {
+ "line": 5,
+ "column": 57
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 115,
+ "end": 137,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 20
+ },
+ "end": {
+ "line": 5,
+ "column": 42
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 115,
+ "end": 119,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 20
+ },
+ "end": {
+ "line": 5,
+ "column": 24
+ }
+ },
+ "name": "name"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 115,
+ "end": 137,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 20
+ },
+ "end": {
+ "line": 5,
+ "column": 42
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 115,
+ "end": 119,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 20
+ },
+ "end": {
+ "line": 5,
+ "column": 24
+ }
+ },
+ "name": "name"
+ },
+ "right": {
+ "type": "TemplateLiteral",
+ "start": 122,
+ "end": 137,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 27
+ },
+ "end": {
+ "line": 5,
+ "column": 42
+ }
+ },
+ "expressions": [
+ {
+ "type": "Literal",
+ "start": 130,
+ "end": 135,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 35
+ },
+ "end": {
+ "line": 5,
+ "column": 40
+ }
+ },
+ "value": "Doe",
+ "raw": "\"Doe\""
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 123,
+ "end": 128,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 28
+ },
+ "end": {
+ "line": 5,
+ "column": 33
+ }
+ },
+ "value": {
+ "raw": "Jane ",
+ "cooked": "Jane "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 136,
+ "end": 136,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 41
+ },
+ "end": {
+ "line": 5,
+ "column": 41
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "Property",
+ "start": 139,
+ "end": 150,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 44
+ },
+ "end": {
+ "line": 5,
+ "column": 55
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 139,
+ "end": 143,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 44
+ },
+ "end": {
+ "line": 5,
+ "column": 48
+ }
+ },
+ "name": "cool"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 139,
+ "end": 150,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 44
+ },
+ "end": {
+ "line": 5,
+ "column": 55
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 139,
+ "end": 143,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 44
+ },
+ "end": {
+ "line": 5,
+ "column": 48
+ }
+ },
+ "name": "cool"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 146,
+ "end": 150,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 51
+ },
+ "end": {
+ "line": 5,
+ "column": 55
+ }
+ },
+ "value": true,
+ "raw": "true"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 208,
+ "end": 210,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 210,
+ "end": 344,
+ "expression": {
+ "type": "Identifier",
+ "start": 217,
+ "end": 223,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 7
+ },
+ "end": {
+ "line": 9,
+ "column": 13
+ }
+ },
+ "name": "people"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "Text",
+ "start": 289,
+ "end": 291,
+ "raw": "\n\t",
+ "data": "\n\t"
+ },
+ {
+ "type": "RegularElement",
+ "start": 291,
+ "end": 336,
+ "name": "p",
+ "attributes": [],
+ "fragment": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "ExpressionTag",
+ "start": 294,
+ "end": 300,
+ "expression": {
+ "type": "Identifier",
+ "start": 295,
+ "end": 299,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 5
+ },
+ "end": {
+ "line": 10,
+ "column": 9
+ }
+ },
+ "name": "name"
+ }
+ },
+ {
+ "type": "Text",
+ "start": 300,
+ "end": 304,
+ "raw": " is ",
+ "data": " is "
+ },
+ {
+ "type": "ExpressionTag",
+ "start": 304,
+ "end": 332,
+ "expression": {
+ "type": "ConditionalExpression",
+ "start": 305,
+ "end": 331,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 15
+ },
+ "end": {
+ "line": 10,
+ "column": 41
+ }
+ },
+ "test": {
+ "type": "Identifier",
+ "start": 305,
+ "end": 309,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 15
+ },
+ "end": {
+ "line": 10,
+ "column": 19
+ }
+ },
+ "name": "cool"
+ },
+ "consequent": {
+ "type": "Literal",
+ "start": 312,
+ "end": 318,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 22
+ },
+ "end": {
+ "line": 10,
+ "column": 28
+ }
+ },
+ "value": "cool",
+ "raw": "'cool'"
+ },
+ "alternate": {
+ "type": "Literal",
+ "start": 321,
+ "end": 331,
+ "loc": {
+ "start": {
+ "line": 10,
+ "column": 31
+ },
+ "end": {
+ "line": 10,
+ "column": 41
+ }
+ },
+ "value": "not cool",
+ "raw": "'not cool'"
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 336,
+ "end": 337,
+ "raw": "\n",
+ "data": "\n"
+ }
+ ]
+ },
+ "context": {
+ "type": "ObjectPattern",
+ "start": 227,
+ "end": 288,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 18
+ },
+ "end": {
+ "line": 9,
+ "column": 79
+ }
+ },
+ "properties": [
+ {
+ "type": "Property",
+ "start": 229,
+ "end": 273,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 20
+ },
+ "end": {
+ "line": 9,
+ "column": 64
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 229,
+ "end": 233,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 20
+ },
+ "end": {
+ "line": 9,
+ "column": 24
+ }
+ },
+ "name": "name"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 229,
+ "end": 273,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 20
+ },
+ "end": {
+ "line": 9,
+ "column": 64
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 229,
+ "end": 233,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 20
+ },
+ "end": {
+ "line": 9,
+ "column": 24
+ }
+ },
+ "name": "name"
+ },
+ "right": {
+ "type": "CallExpression",
+ "start": 236,
+ "end": 273,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 27
+ },
+ "end": {
+ "line": 9,
+ "column": 64
+ }
+ },
+ "callee": {
+ "type": "ArrowFunctionExpression",
+ "start": 237,
+ "end": 270,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 28
+ },
+ "end": {
+ "line": 9,
+ "column": 61
+ }
+ },
+ "id": null,
+ "expression": false,
+ "generator": false,
+ "async": false,
+ "params": [],
+ "body": {
+ "type": "BlockStatement",
+ "start": 243,
+ "end": 270,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 34
+ },
+ "end": {
+ "line": 9,
+ "column": 61
+ }
+ },
+ "body": [
+ {
+ "type": "ReturnStatement",
+ "start": 245,
+ "end": 268,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 36
+ },
+ "end": {
+ "line": 9,
+ "column": 59
+ }
+ },
+ "argument": {
+ "type": "TemplateLiteral",
+ "start": 252,
+ "end": 267,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 43
+ },
+ "end": {
+ "line": 9,
+ "column": 58
+ }
+ },
+ "expressions": [
+ {
+ "type": "Literal",
+ "start": 260,
+ "end": 265,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 51
+ },
+ "end": {
+ "line": 9,
+ "column": 56
+ }
+ },
+ "value": "Doe",
+ "raw": "\"Doe\""
+ }
+ ],
+ "quasis": [
+ {
+ "type": "TemplateElement",
+ "start": 253,
+ "end": 258,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 44
+ },
+ "end": {
+ "line": 9,
+ "column": 49
+ }
+ },
+ "value": {
+ "raw": "Jane ",
+ "cooked": "Jane "
+ },
+ "tail": false
+ },
+ {
+ "type": "TemplateElement",
+ "start": 266,
+ "end": 266,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 57
+ },
+ "end": {
+ "line": 9,
+ "column": 57
+ }
+ },
+ "value": {
+ "raw": "",
+ "cooked": ""
+ },
+ "tail": true
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "arguments": [],
+ "optional": false
+ }
+ }
+ },
+ {
+ "type": "Property",
+ "start": 275,
+ "end": 286,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 66
+ },
+ "end": {
+ "line": 9,
+ "column": 77
+ }
+ },
+ "method": false,
+ "shorthand": true,
+ "computed": false,
+ "key": {
+ "type": "Identifier",
+ "start": 275,
+ "end": 279,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 66
+ },
+ "end": {
+ "line": 9,
+ "column": 70
+ }
+ },
+ "name": "cool"
+ },
+ "kind": "init",
+ "value": {
+ "type": "AssignmentPattern",
+ "start": 275,
+ "end": 286,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 66
+ },
+ "end": {
+ "line": 9,
+ "column": 77
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 275,
+ "end": 279,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 66
+ },
+ "end": {
+ "line": 9,
+ "column": 70
+ }
+ },
+ "name": "cool"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 282,
+ "end": 286,
+ "loc": {
+ "start": {
+ "line": 9,
+ "column": 73
+ },
+ "end": {
+ "line": 9,
+ "column": 77
+ }
+ },
+ "value": true,
+ "raw": "true"
+ }
+ }
+ }
+ ]
+ }
}
]
},
diff --git a/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/input.svelte b/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/input.svelte
new file mode 100644
index 0000000000..f2cc7f5e79
--- /dev/null
+++ b/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/input.svelte
@@ -0,0 +1,7 @@
+
+
+{#each arr as [key, value = 'default']}
+ {key}: {value}
+{/each}
diff --git a/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/output.json b/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/output.json
new file mode 100644
index 0000000000..181f1ba250
--- /dev/null
+++ b/packages/svelte/tests/parser-modern/samples/loose-valid-each-as/output.json
@@ -0,0 +1,308 @@
+{
+ "css": null,
+ "js": [],
+ "start": 45,
+ "end": 119,
+ "type": "Root",
+ "fragment": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "Text",
+ "start": 43,
+ "end": 45,
+ "raw": "\n\n",
+ "data": "\n\n"
+ },
+ {
+ "type": "EachBlock",
+ "start": 45,
+ "end": 119,
+ "expression": {
+ "type": "Identifier",
+ "start": 52,
+ "end": 55,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 7
+ },
+ "end": {
+ "line": 5,
+ "column": 10
+ }
+ },
+ "name": "arr"
+ },
+ "body": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "Text",
+ "start": 84,
+ "end": 86,
+ "raw": "\n\t",
+ "data": "\n\t"
+ },
+ {
+ "type": "RegularElement",
+ "start": 86,
+ "end": 111,
+ "name": "div",
+ "attributes": [],
+ "fragment": {
+ "type": "Fragment",
+ "nodes": [
+ {
+ "type": "ExpressionTag",
+ "start": 91,
+ "end": 96,
+ "expression": {
+ "type": "Identifier",
+ "start": 92,
+ "end": 95,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 7
+ },
+ "end": {
+ "line": 6,
+ "column": 10
+ }
+ },
+ "name": "key"
+ }
+ },
+ {
+ "type": "Text",
+ "start": 96,
+ "end": 98,
+ "raw": ": ",
+ "data": ": "
+ },
+ {
+ "type": "ExpressionTag",
+ "start": 98,
+ "end": 105,
+ "expression": {
+ "type": "Identifier",
+ "start": 99,
+ "end": 104,
+ "loc": {
+ "start": {
+ "line": 6,
+ "column": 14
+ },
+ "end": {
+ "line": 6,
+ "column": 19
+ }
+ },
+ "name": "value"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "type": "Text",
+ "start": 111,
+ "end": 112,
+ "raw": "\n",
+ "data": "\n"
+ }
+ ]
+ },
+ "context": {
+ "type": "ArrayPattern",
+ "start": 59,
+ "end": 83,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 15
+ },
+ "end": {
+ "line": 5,
+ "column": 39
+ }
+ },
+ "elements": [
+ {
+ "type": "Identifier",
+ "start": 60,
+ "end": 63,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 16
+ },
+ "end": {
+ "line": 5,
+ "column": 19
+ }
+ },
+ "name": "key"
+ },
+ {
+ "type": "AssignmentPattern",
+ "start": 65,
+ "end": 82,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 21
+ },
+ "end": {
+ "line": 5,
+ "column": 38
+ }
+ },
+ "left": {
+ "type": "Identifier",
+ "start": 65,
+ "end": 70,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 21
+ },
+ "end": {
+ "line": 5,
+ "column": 26
+ }
+ },
+ "name": "value"
+ },
+ "right": {
+ "type": "Literal",
+ "start": 73,
+ "end": 82,
+ "loc": {
+ "start": {
+ "line": 5,
+ "column": 29
+ },
+ "end": {
+ "line": 5,
+ "column": 38
+ }
+ },
+ "value": "default",
+ "raw": "'default'"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "options": null,
+ "instance": {
+ "type": "Script",
+ "start": 0,
+ "end": 43,
+ "context": "default",
+ "content": {
+ "type": "Program",
+ "start": 18,
+ "end": 34,
+ "loc": {
+ "start": {
+ "line": 1,
+ "column": 0
+ },
+ "end": {
+ "line": 3,
+ "column": 0
+ }
+ },
+ "body": [
+ {
+ "type": "VariableDeclaration",
+ "start": 20,
+ "end": 33,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 1
+ },
+ "end": {
+ "line": 2,
+ "column": 14
+ }
+ },
+ "declarations": [
+ {
+ "type": "VariableDeclarator",
+ "start": 24,
+ "end": 32,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 5
+ },
+ "end": {
+ "line": 2,
+ "column": 13
+ }
+ },
+ "id": {
+ "type": "Identifier",
+ "start": 24,
+ "end": 27,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 5
+ },
+ "end": {
+ "line": 2,
+ "column": 8
+ }
+ },
+ "name": "arr"
+ },
+ "init": {
+ "type": "ArrayExpression",
+ "start": 30,
+ "end": 32,
+ "loc": {
+ "start": {
+ "line": 2,
+ "column": 11
+ },
+ "end": {
+ "line": 2,
+ "column": 13
+ }
+ },
+ "elements": []
+ }
+ }
+ ],
+ "kind": "let"
+ }
+ ],
+ "sourceType": "module"
+ },
+ "attributes": [
+ {
+ "type": "Attribute",
+ "start": 8,
+ "end": 17,
+ "name": "lang",
+ "value": [
+ {
+ "start": 14,
+ "end": 16,
+ "type": "Text",
+ "raw": "ts",
+ "data": "ts"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/_config.js b/packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/_config.js
index ba3be3c25b..b9bfdd7782 100644
--- a/packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/_config.js
+++ b/packages/svelte/tests/runtime-browser/custom-elements-samples/camel-case-attribute/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../assert';
const tick = () => Promise.resolve();
@@ -14,8 +15,7 @@ export default test({
el.setAttribute('camel-case', 'universe');
el.setAttribute('an-array', '[3,4]');
el.setAttribute('camelcase2', 'Hi');
- await tick();
- await tick();
+ flushSync();
assert.htmlEqual(el.shadowRoot.innerHTML, 'Hi universe! 3
4
');
assert.htmlEqual(
target.innerHTML,
@@ -25,8 +25,7 @@ export default test({
el.camelCase = 'galaxy';
el.camelCase2 = 'Hey';
el.anArray = [5, 6];
- await tick();
- await tick();
+ flushSync();
assert.htmlEqual(el.shadowRoot.innerHTML, 'Hey galaxy! 5
6
');
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/_config.js b/packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/_config.js
index dbdf006be5..4314926a94 100644
--- a/packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/_config.js
+++ b/packages/svelte/tests/runtime-browser/custom-elements-samples/custom-method/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../assert';
const tick = () => Promise.resolve();
@@ -8,7 +9,8 @@ export default test({
/** @type {any} */
const el = target.querySelector('custom-element');
- await el.updateFoo(42);
+ el.updateFoo(42);
+ flushSync();
const p = el.shadowRoot.querySelector('p');
assert.equal(p.textContent, '42');
diff --git a/packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/_config.js b/packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/_config.js
index 3cf7a66df1..7f2ba9f331 100644
--- a/packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/_config.js
+++ b/packages/svelte/tests/runtime-browser/custom-elements-samples/element-effect-context/_config.js
@@ -1,4 +1,5 @@
import { test } from '../../assert';
+import { flushSync } from 'svelte';
const tick = () => Promise.resolve();
export default test({
@@ -16,7 +17,7 @@ export default test({
assert.equal(p.innerHTML, 'false');
button.click();
- await tick();
+ flushSync();
assert.equal(button.innerHTML, '1');
assert.equal(p.innerHTML, 'false');
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/_config.js
index 650d0ec360..fe13d43bc8 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each-destructured/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,12 +11,13 @@ export default test({
second:
`,
- async test({ assert, component, target, window }) {
+ test({ assert, component, target, window }) {
const event = new window.MouseEvent('click');
const buttons = target.querySelectorAll('button');
- await buttons[1].dispatchEvent(event);
+ buttons[1].dispatchEvent(event);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/_config.js
index 21fb167873..83b14cb8a3 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-in-each/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,12 +11,13 @@ export default test({
fromState:
`,
- async test({ assert, component, target, window }) {
+ test({ assert, component, target, window }) {
const event = new window.MouseEvent('click');
const buttons = target.querySelectorAll('button');
- await buttons[1].dispatchEvent(event);
+ buttons[1].dispatchEvent(event);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/_config.js
index a2edd90f8b..9276ca8a59 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-node-context/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -5,13 +6,14 @@ export default test({
html: '10 ',
- async test({ assert, target, window }) {
+ test({ assert, target, window }) {
const event = new window.MouseEvent('click');
const button = target.querySelector('button');
ok(button);
- await button.dispatchEvent(event);
+ button.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(target.innerHTML, '11 ');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/_config.js
index c4d84fc2b3..2e6aa4dfee 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler-with-context/_config.js
@@ -1,9 +1,10 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
html: '??? ',
- async test({ assert, target, window }) {
+ test({ assert, target, window }) {
const event = new window.MouseEvent('click', {
clientX: 42,
clientY: 42
@@ -12,7 +13,8 @@ export default test({
const button = target.querySelector('button');
ok(button);
- await button.dispatchEvent(event);
+ button.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(target.innerHTML, '42 ');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/_config.js
index 279171692d..3769a8bd81 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-custom-event-handler/_config.js
@@ -1,9 +1,10 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
html: '0, 0 ',
- async test({ assert, target, window }) {
+ test({ assert, target, window }) {
const event = new window.MouseEvent('click', {
clientX: 42,
clientY: 42
@@ -12,7 +13,8 @@ export default test({
const button = target.querySelector('button');
ok(button);
- await button.dispatchEvent(event);
+ button.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(target.innerHTML, '42, 42 ');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-this/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-this/_config.js
index d296fc5a28..0ab9305ade 100644
--- a/packages/svelte/tests/runtime-legacy/samples/action-this/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/action-this/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -8,7 +9,8 @@ export default test({
const click = new window.MouseEvent('click');
assert.htmlEqual(target.innerHTML, '1 ');
- await button.dispatchEvent(click);
+ button.dispatchEvent(click);
+ flushSync();
assert.htmlEqual(target.innerHTML, '2 ');
}
});
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/_config.js b/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/_config.js
index 1322d63b7a..26fbbc955b 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/_config.js
@@ -1,14 +1,21 @@
-import { ok, test } from '../../test';
+import { test } from '../../test';
export default test({
+ ssrHtml: `
+
+ some div click
+ `,
+
get props() {
return { inert: true };
},
+
test({ assert, target, component }) {
- const div = target.querySelector('div');
- ok(div);
- assert.ok(div.inert);
+ const [div1, div2] = target.querySelectorAll('div');
+ assert.ok(!div1.inert);
+ assert.ok(div2.inert);
+
component.inert = false;
- assert.ok(!div.inert);
+ assert.ok(!div2.inert);
}
});
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/main.svelte b/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/main.svelte
index 6c3df7e31e..3b97923713 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/main.svelte
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-boolean-inert/main.svelte
@@ -2,4 +2,5 @@
export let inert;
+
some div click
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/_config.js b/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/_config.js
index a7518f7e6c..b2f0396181 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-no-style/_config.js
@@ -40,7 +40,7 @@ export default test({
assert.equal(div.className, 'true');
component.testName = {};
- assert.equal(div.className, '[object Object]');
+ assert.equal(div.className, '');
component.testName = '';
assert.equal(div.className, '');
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/_config.js b/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/_config.js
index dbab9fd42b..c8710f9038 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-null-classname-with-style/_config.js
@@ -32,7 +32,7 @@ export default test({
assert.equal(div.className, 'true svelte-x1o6ra');
component.testName = {};
- assert.equal(div.className, '[object Object] svelte-x1o6ra');
+ assert.equal(div.className, ' svelte-x1o6ra');
component.testName = '';
assert.equal(div.className, ' svelte-x1o6ra');
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/_config.js b/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/_config.js
index a7518f7e6c..b2f0396181 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-no-style/_config.js
@@ -40,7 +40,7 @@ export default test({
assert.equal(div.className, 'true');
component.testName = {};
- assert.equal(div.className, '[object Object]');
+ assert.equal(div.className, '');
component.testName = '';
assert.equal(div.className, '');
diff --git a/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/_config.js b/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/_config.js
index 20426dcf4b..8d0f411b8f 100644
--- a/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/attribute-null-func-classname-with-style/_config.js
@@ -40,7 +40,7 @@ export default test({
assert.equal(div.className, 'true svelte-x1o6ra');
component.testName = {};
- assert.equal(div.className, '[object Object] svelte-x1o6ra');
+ assert.equal(div.className, ' svelte-x1o6ra');
component.testName = '';
assert.equal(div.className, ' svelte-x1o6ra');
diff --git a/packages/svelte/tests/runtime-legacy/samples/await-mutate-array/_config.js b/packages/svelte/tests/runtime-legacy/samples/await-mutate-array/_config.js
index 67ea2cb0a3..70268a0e1d 100644
--- a/packages/svelte/tests/runtime-legacy/samples/await-mutate-array/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/await-mutate-array/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -11,7 +12,9 @@ export default test({
const [b1] = target.querySelectorAll('button');
b1.click();
- await Promise.resolve();
+ Promise.resolve();
+ flushSync();
+
assert.htmlEqual(
target.innerHTML,
`2 3 4 \n-------\n1 `
diff --git a/packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/_config.js b/packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/_config.js
index e823c21c9a..af04467749 100644
--- a/packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/await-then-destruct-object-if/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -11,6 +12,7 @@ export default test({
async test({ assert, component, target }) {
await (component.thePromise = Promise.resolve({ result: 1 }));
+ flushSync();
assert.htmlEqual(
target.innerHTML,
@@ -21,6 +23,7 @@ export default test({
);
await new Promise((resolve) => setTimeout(resolve, 1));
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/before-render-chain/_config.js b/packages/svelte/tests/runtime-legacy/samples/before-render-chain/_config.js
index 9364bd9f9e..580df5ca81 100644
--- a/packages/svelte/tests/runtime-legacy/samples/before-render-chain/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/before-render-chain/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -9,8 +10,9 @@ export default test({
1
`,
- async test({ assert, component, target }) {
- await component.list.update();
+ test({ assert, component, target }) {
+ component.list.update();
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/_config.js
index e2a28e8dd9..83ad9c2558 100644
--- a/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text-initial/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -18,7 +19,7 @@ export default test({
hello
`,
- async test({ assert, component, target, window }) {
+ test({ assert, component, target, window }) {
assert.equal(component.name, 'world');
const el = target.querySelector('editor');
@@ -27,7 +28,8 @@ export default test({
const event = new window.Event('input');
el.textContent = 'everybody';
- await el.dispatchEvent(event);
+ el.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/_config.js
index afecc5b3cd..494c338bfe 100644
--- a/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/binding-contenteditable-text/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -10,7 +11,7 @@ export default test({
hello world
`,
- async test({ assert, component, target, window }) {
+ test({ assert, component, target, window }) {
const el = target.querySelector('editor');
ok(el);
assert.equal(el.textContent, 'world');
@@ -18,7 +19,8 @@ export default test({
const event = new window.Event('input');
el.textContent = 'everybody';
- await el.dispatchEvent(event);
+ el.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/_config.js
index 631423feaf..eba77322a1 100644
--- a/packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/binding-input-checkbox-indeterminate/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -17,7 +18,7 @@ export default test({
indeterminate? true
`,
- async test({ assert, component, target, window }) {
+ test({ assert, component, target, window }) {
const input = target.querySelector('input');
ok(input);
@@ -28,7 +29,8 @@ export default test({
input.checked = true;
input.indeterminate = false;
- await input.dispatchEvent(event);
+ input.dispatchEvent(event);
+ flushSync();
assert.equal(component.indeterminate, false);
assert.equal(component.checked, true);
diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/_config.js
index f7e5445072..b8f6a9a74a 100644
--- a/packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/binding-select-in-yield/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { ok, test } from '../../test';
export default test({
@@ -7,8 +8,9 @@ export default test({
return { letter: 'b' };
},
- async test({ assert, component, target, window }) {
- await component.modal.toggle();
+ test({ assert, component, target, window }) {
+ component.modal.toggle();
+ flushSync();
assert.htmlEqual(
target.innerHTML,
@@ -28,7 +30,8 @@ export default test({
const change = new window.MouseEvent('change');
select.options[2].selected = true;
- await select.dispatchEvent(change);
+ select.dispatchEvent(change);
+ flushSync();
assert.equal(component.letter, 'c');
assert.deepEqual(
@@ -49,9 +52,9 @@ export default test({
`
);
- await component.modal.toggle();
- await component.modal.toggle();
- await Promise.resolve();
+ component.modal.toggle();
+ component.modal.toggle();
+ flushSync();
select = target.querySelector('select');
ok(select);
diff --git a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js b/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js
index 85e1faeb73..3bc5d845a1 100644
--- a/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/bindings-coalesced/_config.js
@@ -1,7 +1,8 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
- async test({ assert, component }) {
+ test({ assert, component }) {
const { foo, p } = component;
/** @type {string[]} */
@@ -13,7 +14,8 @@ export default test({
}
});
- await foo.double();
+ foo.double();
+ flushSync();
assert.deepEqual(values, ['6']);
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/_config.js b/packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/_config.js
index 6e3f7a3cb7..e58e8c53c5 100644
--- a/packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/class-shortcut-with-transition/_config.js
@@ -18,7 +18,7 @@ export default test({
raf.tick(150);
assert.htmlEqual(
target.innerHTML,
- 'foo
bar
'
+ 'foo
bar
'
);
component.open = true;
raf.tick(250);
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-props-mutated/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-props-mutated/_config.js
index 91d0aaa0d3..4a5c102ba2 100644
--- a/packages/svelte/tests/runtime-legacy/samples/component-props-mutated/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/component-props-mutated/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
const data = {
@@ -15,9 +16,10 @@ export default test({
html: 'hello
',
- async test({ assert, component, target }) {
+ test({ assert, component, target }) {
data.message = 'goodbye';
- await component.$set({ data });
+ component.$set({ data });
+ flushSync();
assert.htmlEqual(target.innerHTML, 'goodbye
');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/_config.js b/packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/_config.js
index db9afae1b0..f3f5e04be1 100644
--- a/packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/component-slot-let-g/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -5,7 +6,7 @@ export default test({
1
0
`,
- async test({ assert, target, component, window }) {
+ test({ assert, target, component, window }) {
component.x = 2;
assert.htmlEqual(
@@ -17,7 +18,8 @@ export default test({
);
const span = target.querySelector('span');
- await span?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));
+ span?.dispatchEvent(new window.MouseEvent('click', { bubbles: true }));
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/destructured-props-2/_config.js b/packages/svelte/tests/runtime-legacy/samples/destructured-props-2/_config.js
index 950ee4f1ff..0f3fcedce5 100644
--- a/packages/svelte/tests/runtime-legacy/samples/destructured-props-2/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/destructured-props-2/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,7 +11,7 @@ export default test({
async test({ component, assert, target }) {
await component.update();
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/destructured-props-3/_config.js b/packages/svelte/tests/runtime-legacy/samples/destructured-props-3/_config.js
index 9ec2810e71..c78b84ec8c 100644
--- a/packages/svelte/tests/runtime-legacy/samples/destructured-props-3/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/destructured-props-3/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -8,7 +9,8 @@ export default test({
`,
async test({ component, target, assert }) {
await component.update();
- await Promise.resolve();
+ flushSync();
+
assert.htmlEqual(
target.innerHTML,
`
diff --git a/packages/svelte/tests/runtime-legacy/samples/destructured-props-5/_config.js b/packages/svelte/tests/runtime-legacy/samples/destructured-props-5/_config.js
index 8f7a544bfe..103ce64d7c 100644
--- a/packages/svelte/tests/runtime-legacy/samples/destructured-props-5/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/destructured-props-5/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,7 +11,7 @@ export default test({
async test({ component, assert, target }) {
await component.update();
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/_config.js b/packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/_config.js
index 2df8753114..9c09581097 100644
--- a/packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/destructuring-assignment-array/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,9 +11,9 @@ export default test({
`,
- async test({ assert, component, target }) {
- await component.swap(0, 1);
- await Promise.resolve();
+ test({ assert, component, target }) {
+ component.swap(0, 1);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/_config.js b/packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/_config.js
index a661ec2596..99fa84e2a9 100644
--- a/packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/key-block-expression-2/_config.js
@@ -1,19 +1,26 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
html: '3
',
- async test({ assert, component, target }) {
+ test({ assert, component, target }) {
const div = target.querySelector('div');
- await component.mutate();
+ component.mutate();
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '5
');
assert.strictEqual(div, target.querySelector('div'));
- await component.reassign();
+ component.reassign();
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '7
');
assert.strictEqual(div, target.querySelector('div'));
- await component.changeKey();
+ component.changeKey();
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '7
');
assert.notStrictEqual(div, target.querySelector('div'));
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/pre-tag/_config.js b/packages/svelte/tests/runtime-legacy/samples/pre-tag/_config.js
index f1a42e996a..d7e1fe9d43 100644
--- a/packages/svelte/tests/runtime-legacy/samples/pre-tag/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/pre-tag/_config.js
@@ -2,17 +2,9 @@ import { test } from '../../test';
export default test({
mode: ['client', 'server'], // output is correct, but test suite chokes on the extra ssr comment which is harmless
- withoutNormalizeHtml: true,
- html: get_html(false),
- ssrHtml: get_html(true)
-});
-
-/** @param {boolean} ssr */
-function get_html(ssr) {
- // ssr rendered HTML has an extra newline prefixed within `` tag,
- // if the tag starts with `\n`
- // because when browser parses the SSR rendered HTML, it will ignore the 1st '\n' character
- return `${ssr ? '' : ''} A
+ withoutNormalizeHtml: 'only-strip-comments', // because whitespace inside pre tags is significant
+ // Note how we're testing against target.innerHTML which already removed the redundant first newline
+ html: ` A
B
C
@@ -35,5 +27,5 @@ function get_html(ssr) {
leading newlines without spaces with spaces ${' '}
newline after leading space
-multiple leading newlines ${ssr ? '' : ''}`;
-}
+multiple leading newlines `
+});
diff --git a/packages/svelte/tests/runtime-legacy/samples/prop-const/_config.js b/packages/svelte/tests/runtime-legacy/samples/prop-const/_config.js
index 040b911cc6..804ee53342 100644
--- a/packages/svelte/tests/runtime-legacy/samples/prop-const/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/prop-const/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -10,11 +11,12 @@ export default test({
b: 2
`,
- async test({ assert, component, target }) {
- await component.$set({
+ test({ assert, component, target }) {
+ component.$set({
a: 5,
b: 6
});
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/props-reactive-b/_config.js b/packages/svelte/tests/runtime-legacy/samples/props-reactive-b/_config.js
index b92d81bd53..91133f0bf4 100644
--- a/packages/svelte/tests/runtime-legacy/samples/props-reactive-b/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/props-reactive-b/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -11,8 +12,9 @@ export default test({
c: 3
`,
- async test({ assert, component, target }) {
- await component.$set({ a: 4 });
+ test({ assert, component, target }) {
+ component.$set({ a: 4 });
+ flushSync();
assert.htmlEqual(
target.innerHTML,
@@ -23,7 +25,8 @@ export default test({
`
);
- await component.$set({ b: 5 });
+ component.$set({ b: 5 });
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js b/packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js
index 2325d17cd5..1a67e46b38 100644
--- a/packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/reactive-assignment-in-complex-declaration-with-store-3/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
import { store } from './store.js';
@@ -6,10 +7,9 @@ export default test({
before_test() {
store.reset();
},
- async test({ assert, target }) {
+ test({ assert, target }) {
store.set(42);
-
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(target.innerHTML, '42 ');
diff --git a/packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/_config.js b/packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/_config.js
index f2f7fe92b1..3b31ee766e 100644
--- a/packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/reactive-value-dependency-not-referenced/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -6,29 +7,35 @@ export default test({
42
`,
- async test({ assert, component, target }) {
- await component.updateStore(undefined);
- await Promise.resolve();
+ test({ assert, component, target }) {
+ component.updateStore(undefined);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '
42
');
- await component.updateStore(33);
- await Promise.resolve();
+ component.updateStore(33);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '33
42
');
- await component.updateStore(undefined);
- await Promise.resolve();
+ component.updateStore(undefined);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '
42
');
- await component.updateVar(undefined);
- await Promise.resolve();
+ component.updateVar(undefined);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '
');
- await component.updateVar(33);
- await Promise.resolve();
+ component.updateVar(33);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '
33
');
- await component.updateVar(undefined);
- await Promise.resolve();
+ component.updateVar(undefined);
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '
');
}
});
diff --git a/packages/svelte/tests/runtime-legacy/samples/reactive-value-function/_config.js b/packages/svelte/tests/runtime-legacy/samples/reactive-value-function/_config.js
index cbcb19d95e..5317ab496f 100644
--- a/packages/svelte/tests/runtime-legacy/samples/reactive-value-function/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/reactive-value-function/_config.js
@@ -1,10 +1,12 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
html: '1-2',
- async test({ assert, component, target }) {
- await component.update();
+ test({ assert, component, target }) {
+ component.update();
+ flushSync();
assert.htmlEqual(target.innerHTML, '3-4');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/_config.js b/packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/_config.js
index e05c8c80dd..e97a046f68 100644
--- a/packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/reactive-values-text-node/_config.js
@@ -1,5 +1,6 @@
import { test } from '../../test';
import { create_deferred } from '../../../helpers';
+import { flushSync } from 'svelte';
/** @type {ReturnType} */
let deferred;
@@ -17,6 +18,8 @@ export default test({
async test({ assert, target }) {
await deferred.promise;
+ flushSync();
+
assert.htmlEqual(
target.innerHTML,
`
diff --git a/packages/svelte/tests/runtime-legacy/samples/spread-own-props/_config.js b/packages/svelte/tests/runtime-legacy/samples/spread-own-props/_config.js
index 708e3615f1..7486055440 100644
--- a/packages/svelte/tests/runtime-legacy/samples/spread-own-props/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/spread-own-props/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -17,13 +18,14 @@ export default test({
quux: core
`,
- async test({ assert, component, target }) {
- await component.$set({
+ test({ assert, component, target }) {
+ component.$set({
foo: 'wut',
baz: 40 + 3,
qux: `this is a ${'rather boring'} string`,
quux: 'heart'
});
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js b/packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js
index 8e0886c668..d380150e55 100644
--- a/packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/store-auto-subscribe-in-reactive-declaration-2/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -6,10 +7,9 @@ export default test({
Hello World
`,
- async test({ assert, component, target }) {
- await component.update_value('Hi Svelte');
- await Promise.resolve();
- await Promise.resolve();
+ test({ assert, component, target }) {
+ component.update_value('Hi Svelte');
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/_config.js b/packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/_config.js
index 1c81f7c4e8..89ff695d9d 100644
--- a/packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/store-increment-updates-reactive/_config.js
@@ -1,10 +1,13 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
html: '0',
- async test({ assert, component, target }) {
- await component.increment();
+ test({ assert, component, target }) {
+ component.increment();
+ flushSync();
+
assert.htmlEqual(target.innerHTML, '1');
}
});
diff --git a/packages/svelte/tests/runtime-legacy/samples/store-unreferenced/_config.js b/packages/svelte/tests/runtime-legacy/samples/store-unreferenced/_config.js
index 808ed899d3..7096f5d1fe 100644
--- a/packages/svelte/tests/runtime-legacy/samples/store-unreferenced/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/store-unreferenced/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
import { count } from './store.js';
@@ -8,8 +9,9 @@ export default test({
count.set(0);
},
- async test({ assert, component, target }) {
- await component.increment();
+ test({ assert, component, target }) {
+ component.increment();
+ flushSync();
assert.htmlEqual(target.innerHTML, 'count: 1
');
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/window-event-custom/_config.js b/packages/svelte/tests/runtime-legacy/samples/window-event-custom/_config.js
index 32b1c65154..f6b7a8af42 100644
--- a/packages/svelte/tests/runtime-legacy/samples/window-event-custom/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/window-event-custom/_config.js
@@ -1,14 +1,16 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
html: 'escaped: false
',
- async test({ assert, target, window }) {
+ test({ assert, target, window }) {
const event = new window.KeyboardEvent('keydown', {
key: 'Escape'
});
- await window.dispatchEvent(event);
+ window.dispatchEvent(event);
+ flushSync();
assert.htmlEqual(
target.innerHTML,
diff --git a/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/Component.svelte b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/Component.svelte
new file mode 100644
index 0000000000..17e895fd8c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/Component.svelte
@@ -0,0 +1,9 @@
+
+
+{is_open}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/_config.js b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/_config.js
new file mode 100644
index 0000000000..45cd58f55c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/_config.js
@@ -0,0 +1,35 @@
+import { ok, test } from '../../test';
+import { flushSync } from 'svelte';
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+ html: `true true `,
+ ssrHtml: `true true `,
+
+ async test({ assert, target, instance }) {
+ const [btn1, btn2] = target.querySelectorAll('button');
+ const input = target.querySelector('input');
+ flushSync(() => {
+ btn1.click();
+ });
+ assert.equal(btn1.innerHTML, 'false');
+ assert.equal(btn2.innerHTML, 'false');
+ assert.equal(input?.checked, false);
+
+ flushSync(() => {
+ btn2.click();
+ });
+ assert.equal(btn1.innerHTML, 'true');
+ assert.equal(btn2.innerHTML, 'true');
+ assert.equal(input?.checked, true);
+
+ flushSync(() => {
+ input?.click();
+ });
+ assert.equal(btn1.innerHTML, 'false');
+ assert.equal(btn2.innerHTML, 'false');
+ assert.equal(input?.checked, false);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/main.svelte b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/main.svelte
new file mode 100644
index 0000000000..3b47eef156
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/bindable-prop-and-export/main.svelte
@@ -0,0 +1,14 @@
+
+
+
+
+{
+ comp.open();
+}}>{open}
+
+
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/clsx/_config.js b/packages/svelte/tests/runtime-runes/samples/clsx/_config.js
new file mode 100644
index 0000000000..202a13b1cb
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/clsx/_config.js
@@ -0,0 +1,49 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ html: `
+
+
+
+
+
+
+ child
+ child
+ child
+ child
+ child
+
+
+
+ update
+ `,
+ test({ assert, target }) {
+ const button = target.querySelector('button');
+
+ button?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `
+
+
+
+
+
+
+ child
+ child
+ child
+ child
+ child
+
+
+
+ update
+ `
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/clsx/child.svelte b/packages/svelte/tests/runtime-runes/samples/clsx/child.svelte
new file mode 100644
index 0000000000..1b8be697c0
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/clsx/child.svelte
@@ -0,0 +1,5 @@
+
+
+child
diff --git a/packages/svelte/tests/runtime-runes/samples/clsx/main.svelte b/packages/svelte/tests/runtime-runes/samples/clsx/main.svelte
new file mode 100644
index 0000000000..ebc0697f97
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/clsx/main.svelte
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ foo = null;
+ bar = 'bar';
+}}>update
+
+
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-disconnect/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-disconnect/_config.js
new file mode 100644
index 0000000000..76e60b7402
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/derived-disconnect/_config.js
@@ -0,0 +1,96 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, target, logs }) {
+ let [b1, b2, b3, b4, b5] = target.querySelectorAll('button');
+
+ b1?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 1
+ Name: a
a
b
c
d
+ Show / Hide
`
+ );
+
+ b2?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 2
+ Name: b
a
b
c
d
+ Show / Hide
`
+ );
+
+ b3?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 3
+ Name: c
a
b
c
d
+ Show / Hide
`
+ );
+
+ b4?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 4
+ Name: d
a
b
c
d
+ Show / Hide
`
+ );
+
+ b5?.click();
+ flushSync();
+
+ b5?.click();
+ flushSync();
+
+ [b1, b2, b3, b4, b5] = target.querySelectorAll('button');
+
+ b1?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 1
+ Name: a
a
b
c
d
+ Show / Hide
`
+ );
+
+ b2?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 2
+ Name: b
a
b
c
d
+ Show / Hide
`
+ );
+
+ b3?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 3
+ Name: c
a
b
c
d
+ Show / Hide
`
+ );
+
+ b4?.click();
+ flushSync();
+
+ assert.htmlEqual(
+ target.innerHTML,
+ `Current ID: 4
+ Name: d
a
b
c
d
+ Show / Hide
`
+ );
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-disconnect/main.svelte b/packages/svelte/tests/runtime-runes/samples/derived-disconnect/main.svelte
new file mode 100644
index 0000000000..8cb6ed2afd
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/derived-disconnect/main.svelte
@@ -0,0 +1,23 @@
+
+
+
+ {#if visible}
+ Current ID: {currentId}
+ Name: {currentItem.name}
+ {#each items as item}
+ { currentId = item.id; }}>{item.name}
+ {/each}
+ {/if}
+
+ { visible = !visible; }}>Show / Hide
+
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js
index 3604000543..3ca98bb0c6 100644
--- a/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -7,7 +8,7 @@ export default test({
async test({ assert, target }) {
await Promise.resolve();
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(
target.innerHTML,
'd2: 3,4,5
d3: 3,4,5
d4: 3,4,5
'
diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-5/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-unowned-5/_config.js
index 20c3cc112e..5f38394d06 100644
--- a/packages/svelte/tests/runtime-runes/samples/derived-unowned-5/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-5/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -5,7 +6,7 @@ export default test({
// The test has a bunch of queueMicrotasks
await Promise.resolve();
await Promise.resolve();
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(target.innerHTML, `Zeeba Neighba
`);
}
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-9/_config.js b/packages/svelte/tests/runtime-runes/samples/each-updates-9/_config.js
new file mode 100644
index 0000000000..ee35058c59
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-9/_config.js
@@ -0,0 +1,16 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, target, logs }) {
+ const [btn1] = target.querySelectorAll('button');
+
+ btn1.click();
+ flushSync();
+
+ await Promise.resolve();
+ await Promise.resolve();
+
+ assert.deepEqual(logs, ['cleanup']);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/each-updates-9/main.svelte b/packages/svelte/tests/runtime-runes/samples/each-updates-9/main.svelte
new file mode 100644
index 0000000000..f5b2c8eb12
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/each-updates-9/main.svelte
@@ -0,0 +1,46 @@
+
+
+ {
+ storeOptions.someBoolean = !storeOptions.someBoolean;
+ }}>+
+
+{#each myStore.data as _}{/each}
diff --git a/packages/svelte/tests/runtime-runes/samples/error-boundary-21/Child.svelte b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/Child.svelte
new file mode 100644
index 0000000000..ea60542af9
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/Child.svelte
@@ -0,0 +1,3 @@
+
diff --git a/packages/svelte/tests/runtime-runes/samples/error-boundary-21/_config.js b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/_config.js
new file mode 100644
index 0000000000..e301f83e60
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/_config.js
@@ -0,0 +1,17 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ html: '0
',
+ mode: ['client'],
+ test({ assert, target }) {
+ let btn = target.querySelector('button');
+ let div = target.querySelector('div');
+
+ flushSync(() => {
+ btn?.click();
+ });
+
+ assert.equal(div?.innerHTML, `1`);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/error-boundary-21/main.svelte b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/main.svelte
new file mode 100644
index 0000000000..ed3140b1ef
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/error-boundary-21/main.svelte
@@ -0,0 +1,14 @@
+
+
+count++}>
+
+
+
+ {#snippet failed()}
+ {count}
+ {/snippet}
+
diff --git a/packages/svelte/tests/runtime-runes/samples/export-binding/_config.js b/packages/svelte/tests/runtime-runes/samples/export-binding/_config.js
deleted file mode 100644
index d3b9c8e4eb..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/export-binding/_config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- compileOptions: {
- dev: true // to ensure we we catch the error
- },
- error:
- 'bind_invalid_export\n' +
- 'Component counter/index.svelte has an export named `increment` that a consumer component is trying to access using `bind:increment`, which is disallowed. Instead, use `bind:this` (e.g. ` `) and then access the property on the bound component instance (e.g. `component.increment`)'
-});
diff --git a/packages/svelte/tests/runtime-runes/samples/export-binding/counter/index.svelte b/packages/svelte/tests/runtime-runes/samples/export-binding/counter/index.svelte
deleted file mode 100644
index 14e0de961b..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/export-binding/counter/index.svelte
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-{count}
diff --git a/packages/svelte/tests/runtime-runes/samples/export-binding/main.svelte b/packages/svelte/tests/runtime-runes/samples/export-binding/main.svelte
deleted file mode 100644
index 4ad1684701..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/export-binding/main.svelte
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-increment
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/_config.js
new file mode 100644
index 0000000000..f54f78f5c1
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/_config.js
@@ -0,0 +1,56 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+/**
+ * @param {any[]} logs
+ */
+function normalise_trace_logs(logs) {
+ let normalised = [];
+ for (let i = 0; i < logs.length; i++) {
+ const log = logs[i];
+
+ if (typeof log === 'string' && log.includes('%c')) {
+ const split = log.split('%c');
+ normalised.push({
+ log: (split[0].length !== 0 ? split[0] : split[1]).trim(),
+ highlighted: logs[i + 1] === 'color: CornflowerBlue; font-weight: bold'
+ });
+ i++;
+ } else if (log instanceof Error) {
+ continue;
+ } else {
+ normalised.push({ log });
+ }
+ }
+ return normalised;
+}
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+
+ test({ assert, target, logs }) {
+ // initial log, everything is highlighted
+
+ assert.deepEqual(normalise_trace_logs(logs), [
+ { log: 'iife', highlighted: false },
+ { log: '$state', highlighted: true },
+ { log: 0 },
+ { log: 'effect', highlighted: false }
+ ]);
+
+ logs.length = 0;
+
+ const button = target.querySelector('button');
+ button?.click();
+ flushSync();
+
+ assert.deepEqual(normalise_trace_logs(logs), [
+ { log: 'iife', highlighted: false },
+ { log: '$state', highlighted: true },
+ { log: 1 },
+ { log: 'effect', highlighted: false }
+ ]);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/main.svelte
new file mode 100644
index 0000000000..f60fb0438c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-nested/main.svelte
@@ -0,0 +1,13 @@
+
+
+ count++}>{count}
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/_config.js
new file mode 100644
index 0000000000..e779a835c2
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/_config.js
@@ -0,0 +1,8 @@
+import { test } from '../../test';
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+ test() {}
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/main.svelte
new file mode 100644
index 0000000000..30eb95f124
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-null/main.svelte
@@ -0,0 +1,9 @@
+
+
+count++}>{count}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/_config.js
new file mode 100644
index 0000000000..c9a66289a1
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/_config.js
@@ -0,0 +1,72 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+/**
+ * @param {any[]} logs
+ */
+function normalise_trace_logs(logs) {
+ let normalised = [];
+ for (let i = 0; i < logs.length; i++) {
+ const log = logs[i];
+
+ if (typeof log === 'string' && log.includes('%c')) {
+ const split = log.split('%c');
+ normalised.push({
+ log: (split[0].length !== 0 ? split[0] : split[1]).trim(),
+ highlighted: logs[i + 1] === 'color: CornflowerBlue; font-weight: bold'
+ });
+ i++;
+ } else if (log instanceof Error) {
+ continue;
+ } else {
+ normalised.push({ log });
+ }
+ }
+ return normalised;
+}
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+
+ test({ assert, target, logs }) {
+ // initial log, everything is highlighted
+
+ assert.deepEqual(normalise_trace_logs(logs), [
+ { log: 'effect', highlighted: false },
+ { log: '$state', highlighted: true },
+ { log: false }
+ ]);
+
+ logs.length = 0;
+
+ const button = target.querySelector('button');
+ button?.click();
+ flushSync();
+
+ const input = target.querySelector('input');
+ input?.click();
+ flushSync();
+
+ // checked changed, effect reassign state, values should be correct and be correctly highlighted
+
+ assert.deepEqual(normalise_trace_logs(logs), [
+ { log: 'effect', highlighted: false },
+ { log: '$state', highlighted: true },
+ { log: true },
+ { log: '$state', highlighted: true },
+ { log: 1 },
+ { log: 'effect', highlighted: false },
+ { log: '$state', highlighted: false },
+ { log: true },
+ { log: '$state', highlighted: true },
+ { log: 2 },
+ { log: 'effect', highlighted: false },
+ { log: '$state', highlighted: false },
+ { log: true },
+ { log: '$state', highlighted: true },
+ { log: 3 }
+ ]);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/main.svelte
new file mode 100644
index 0000000000..5028c0f251
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace-reassignment/main.svelte
@@ -0,0 +1,18 @@
+
+
+{
+ count++;
+}}>{count}
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/Child.svelte b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/Child.svelte
new file mode 100644
index 0000000000..ef91b0756d
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/Child.svelte
@@ -0,0 +1,5 @@
+
+
+ arr.push(arr.length)}>
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/_config.js b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/_config.js
new file mode 100644
index 0000000000..4c77aea206
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/_config.js
@@ -0,0 +1,20 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ compileOptions: {
+ dev: true
+ },
+ test({ target, warnings, assert }) {
+ const btn = target.querySelector('button');
+ flushSync(() => {
+ btn?.click();
+ });
+ assert.deepEqual(warnings, []);
+
+ flushSync(() => {
+ btn?.click();
+ });
+ assert.deepEqual(warnings, []);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/main.svelte b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/main.svelte
new file mode 100644
index 0000000000..4a3ce82726
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/ownership-function-bindings/main.svelte
@@ -0,0 +1,10 @@
+
+
+ len % 2 === 0 ? arr : arr2, (v) => {}} />
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/pre-no-content/_config.js b/packages/svelte/tests/runtime-runes/samples/pre-no-content/_config.js
new file mode 100644
index 0000000000..cb9d31a69f
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/pre-no-content/_config.js
@@ -0,0 +1,5 @@
+import { test } from '../../test';
+
+export default test({
+ html: ` `
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/pre-no-content/main.svelte b/packages/svelte/tests/runtime-runes/samples/pre-no-content/main.svelte
new file mode 100644
index 0000000000..a4357066a5
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/pre-no-content/main.svelte
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/Counter.svelte b/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/Counter.svelte
deleted file mode 100644
index f22fd6e976..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/Counter.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-{rest.count}
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/_config.js b/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/_config.js
deleted file mode 100644
index fa0994c370..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/_config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- compileOptions: {
- dev: true
- },
-
- html: '0',
-
- error:
- 'bind_not_bindable\n' +
- 'A component is attempting to bind to a non-bindable property `count` belonging to Counter.svelte (i.e. ``). To mark a property as bindable: `let { count = $bindable() } = $props()`'
-});
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/main.svelte b/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/main.svelte
deleted file mode 100644
index 80242b75c6..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable-spread/main.svelte
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/Counter.svelte b/packages/svelte/tests/runtime-runes/samples/props-not-bindable/Counter.svelte
deleted file mode 100644
index 4bc2db3968..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/Counter.svelte
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-{count}
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/_config.js b/packages/svelte/tests/runtime-runes/samples/props-not-bindable/_config.js
deleted file mode 100644
index fa0994c370..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/_config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { test } from '../../test';
-
-export default test({
- compileOptions: {
- dev: true
- },
-
- html: '0',
-
- error:
- 'bind_not_bindable\n' +
- 'A component is attempting to bind to a non-bindable property `count` belonging to Counter.svelte (i.e. ``). To mark a property as bindable: `let { count = $bindable() } = $props()`'
-});
diff --git a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/main.svelte b/packages/svelte/tests/runtime-runes/samples/props-not-bindable/main.svelte
deleted file mode 100644
index 80242b75c6..0000000000
--- a/packages/svelte/tests/runtime-runes/samples/props-not-bindable/main.svelte
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/_config.js b/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/_config.js
index ad7bdc654a..f029227472 100644
--- a/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/_config.js
@@ -1,21 +1,33 @@
import { flushSync } from 'svelte';
-import { test } from '../../test';
+import { ok, test } from '../../test';
export default test({
compileOptions: {
dev: true
},
- html: `items: null x
`,
+ html: `items: null x
`,
test({ assert, target, warnings }) {
const btn = target.querySelector('button');
+ ok(btn);
- flushSync(() => btn?.click());
- assert.htmlEqual(target.innerHTML, `items: [] x
`);
+ flushSync(() => btn.click());
+ assert.htmlEqual(
+ target.innerHTML,
+ `items: [] x
`
+ );
- flushSync(() => btn?.click());
- assert.htmlEqual(target.innerHTML, `items: [0] x
`);
+ flushSync(() => btn.click());
+ assert.htmlEqual(
+ target.innerHTML,
+ `items: [0] x
`
+ );
+
+ const input = target.querySelector('input');
+ ok(input);
+ input.checked = true;
+ flushSync(() => input.dispatchEvent(new Event('change', { bubbles: true })));
assert.deepEqual(warnings, [
'Assignment to `items` property (main.svelte:8:24) will evaluate to the right-hand side, not the value of `items` following the assignment. This may result in unexpected behaviour.'
diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/main.svelte b/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/main.svelte
index 40592e08b8..ad94c4e56e 100644
--- a/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/main.svelte
+++ b/packages/svelte/tests/runtime-runes/samples/proxy-coercive-assignment-warning/main.svelte
@@ -2,7 +2,7 @@
import Test from './Test.svelte';
let entries = $state([]);
- let object = $state({ items: null });
+ let object = $state({ items: null, group: [] });
(object.items ??= []).push(object.items.length)}>
@@ -11,6 +11,8 @@
x
+
+
entries[2], (v) => (entries[2] = v)}>
diff --git a/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/Component.svelte b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/Component.svelte
new file mode 100644
index 0000000000..afb62ced2f
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/Component.svelte
@@ -0,0 +1,7 @@
+
+
+{label}
diff --git a/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/_config.js b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/_config.js
new file mode 100644
index 0000000000..650e48e84c
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/_config.js
@@ -0,0 +1,19 @@
+import { ok, test } from '../../test';
+import { flushSync } from 'svelte';
+
+export default test({
+ html: `0
`,
+
+ async test({ assert, target }) {
+ const p = target.querySelector('p');
+ const btn = target.querySelector('button');
+ flushSync(() => {
+ btn?.click();
+ });
+ assert.equal(p?.innerHTML, '1');
+ flushSync(() => {
+ btn?.click();
+ });
+ assert.equal(p?.innerHTML, '2');
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/main.svelte b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/main.svelte
new file mode 100644
index 0000000000..773aabeea3
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/read-version-previous-reaction/main.svelte
@@ -0,0 +1,18 @@
+
+
+props.label++}>
+
+
\ No newline at end of file
diff --git a/packages/svelte/tests/runtime-runes/samples/runes-from-func/_config.js b/packages/svelte/tests/runtime-runes/samples/runes-from-func/_config.js
index 7d3dd9993f..5ed7579c62 100644
--- a/packages/svelte/tests/runtime-runes/samples/runes-from-func/_config.js
+++ b/packages/svelte/tests/runtime-runes/samples/runes-from-func/_config.js
@@ -1,3 +1,4 @@
+import { flushSync } from 'svelte';
import { test } from '../../test';
export default test({
@@ -5,7 +6,7 @@ export default test({
async test({ assert, target }) {
await Promise.resolve();
- await Promise.resolve();
+ flushSync();
assert.htmlEqual(target.innerHTML, `1 `);
}
});
diff --git a/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/Test.svelte b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/Test.svelte
new file mode 100644
index 0000000000..364a4a7aca
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/Test.svelte
@@ -0,0 +1,12 @@
+
diff --git a/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/_config.js b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/_config.js
new file mode 100644
index 0000000000..bb99988756
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/_config.js
@@ -0,0 +1,12 @@
+import { flushSync } from 'svelte';
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, target, logs }) {
+ const input = target.querySelector('input');
+ flushSync(() => {
+ input?.click();
+ });
+ assert.deepEqual(logs, [0, 1]);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/main.svelte b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/main.svelte
new file mode 100644
index 0000000000..7ba59b5afc
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/store-update-on-destroy/main.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+{#if checked}
+
+{/if}
diff --git a/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/_config.js b/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/_config.js
new file mode 100644
index 0000000000..7543278b62
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/_config.js
@@ -0,0 +1,11 @@
+import { test, ok } from '../../test';
+
+export default test({
+ html: `potato `,
+ test({ assert, target }) {
+ const title = target.querySelector('title');
+ ok(title);
+
+ assert.equal(title.namespaceURI, 'http://www.w3.org/2000/svg');
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/main.svelte b/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/main.svelte
new file mode 100644
index 0000000000..8be23f8b23
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/main.svelte
@@ -0,0 +1,5 @@
+
+ {#if true}
+ potato
+ {/if}
+
diff --git a/packages/svelte/tests/signals/test.ts b/packages/svelte/tests/signals/test.ts
index 6796655cc8..e198a5a89d 100644
--- a/packages/svelte/tests/signals/test.ts
+++ b/packages/svelte/tests/signals/test.ts
@@ -296,6 +296,7 @@ describe('signals', () => {
const destroy = effect_root(() => {
user_effect(() => {
log.push($.get(calc));
+ $.get(calc);
});
});
@@ -306,7 +307,7 @@ describe('signals', () => {
flushSync(() => set(count, 4));
flushSync(() => set(count, 0));
// Ensure we're not leaking consumers
- assert.deepEqual(count.reactions?.length, 2);
+ assert.deepEqual(count.reactions?.length, 1);
assert.deepEqual(calc.reactions?.length, 1);
assert.deepEqual(log, [0, 2, 'limit', 0]);
destroy();
@@ -781,4 +782,37 @@ describe('signals', () => {
assert.equal($.get(count), 0n);
};
});
+
+ test('unowned deriveds correctly re-attach to their source', () => {
+ const log: any[] = [];
+
+ return () => {
+ const a = state(0);
+ const b = state(0);
+ const c = derived(() => {
+ $.get(a);
+ return $.get(b);
+ });
+
+ $.get(c);
+
+ set(a, 1);
+
+ const destroy = effect_root(() => {
+ render_effect(() => {
+ log.push($.get(c));
+ });
+ });
+
+ assert.deepEqual(log, [0]);
+
+ set(b, 1);
+
+ flushSync();
+
+ assert.deepEqual(log, [0, 1]);
+
+ destroy();
+ };
+ });
});
diff --git a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js
index 87fce120fd..3e5a12ed9d 100644
--- a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
function increment(_, counter) {
counter.count += 1;
@@ -26,11 +26,11 @@ export default function Await_block_scope($$anchor) {
var text_1 = $.sibling(node);
$.template_effect(() => {
- $.set_text(text, `clicks: ${counter.count ?? ""}`);
- $.set_text(text_1, ` ${counter.count ?? ""}`);
+ $.set_text(text, `clicks: ${counter.count ?? ''}`);
+ $.set_text(text_1, ` ${counter.count ?? ''}`);
});
$.append($$anchor, fragment);
}
-$.delegate(["click"]);
\ No newline at end of file
+$.delegate(['click']);
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js
index 44c68a7c96..012789a550 100644
--- a/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/await-block-scope/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Await_block_scope($$payload) {
let counter = { count: 0 };
diff --git a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js
index bcddb6f658..fa990b33ee 100644
--- a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/client/index.svelte.js
@@ -1,11 +1,11 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
import TextInput from './Child.svelte';
const snippet = ($$anchor) => {
$.next();
- var text = $.text("Something");
+ var text = $.text('Something');
$.append($$anchor, text);
};
@@ -29,6 +29,6 @@ export default function Bind_component_snippet($$anchor) {
var text_1 = $.sibling(node);
- $.template_effect(() => $.set_text(text_1, ` value: ${$.get(value) ?? ""}`));
+ $.template_effect(() => $.set_text(text_1, ` value: ${$.get(value) ?? ''}`));
$.append($$anchor, fragment);
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js
index d223a31502..c091179c41 100644
--- a/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/bind-component-snippet/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
import TextInput from './Child.svelte';
function snippet($$payload) {
diff --git a/packages/svelte/tests/snapshot/samples/bind-this/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-this/_expected/client/index.svelte.js
index fedcc87696..dfd32a04e5 100644
--- a/packages/svelte/tests/snapshot/samples/bind-this/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/bind-this/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
export default function Bind_this($$anchor) {
$.bind_this(Foo($$anchor, { $$legacy: true }), ($$value) => foo = $$value, () => foo);
diff --git a/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js
index badca8d4a0..148573766f 100644
--- a/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/bind-this/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Bind_this($$payload) {
Foo($$payload, {});
diff --git a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/client/index.svelte.js
index 399fa19b62..2898f31a6f 100644
--- a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
export default function Class_state_field_constructor_assignment($$anchor, $$props) {
$.push($$props, true);
diff --git a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js
index bcc7c2e1f2..2a115a4983 100644
--- a/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/class-state-field-constructor-assignment/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Class_state_field_constructor_assignment($$payload, $$props) {
$.push();
diff --git a/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/client/index.svelte.js
index dbda825c4d..9651713c52 100644
--- a/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
/* index.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/client";
+import * as $ from 'svelte/internal/client';
let a = $.state(1);
let b = $.state(2);
diff --git a/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/server/index.svelte.js
index 2797d4312b..62b655b266 100644
--- a/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/destructured-assignments/_expected/server/index.svelte.js
@@ -1,5 +1,5 @@
/* index.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
let a = 1;
let b = 2;
diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js
index 846acc67a6..ce77a27e19 100644
--- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/client/main.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
var root = $.template(`
`, 3);
@@ -13,20 +13,20 @@ export default function Main($$anchor) {
var custom_element = $.sibling(svg, 2);
var div_1 = $.sibling(custom_element, 2);
- $.template_effect(() => $.set_attribute(div_1, "foobar", y()));
+ $.template_effect(() => $.set_attribute(div_1, 'foobar', y()));
var svg_1 = $.sibling(div_1, 2);
- $.template_effect(() => $.set_attribute(svg_1, "viewBox", y()));
+ $.template_effect(() => $.set_attribute(svg_1, 'viewBox', y()));
var custom_element_1 = $.sibling(svg_1, 2);
- $.template_effect(() => $.set_custom_element_data(custom_element_1, "fooBar", y()));
+ $.template_effect(() => $.set_custom_element_data(custom_element_1, 'fooBar', y()));
$.template_effect(() => {
- $.set_attribute(div, "foobar", x);
- $.set_attribute(svg, "viewBox", x);
- $.set_custom_element_data(custom_element, "fooBar", x);
+ $.set_attribute(div, 'foobar', x);
+ $.set_attribute(svg, 'viewBox', x);
+ $.set_custom_element_data(custom_element, 'fooBar', x);
});
$.append($$anchor, fragment);
diff --git a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js
index 5eaa55aa49..4ea5edb6a0 100644
--- a/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/dynamic-attributes-casing/_expected/server/main.svelte.js
@@ -1,9 +1,9 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Main($$payload) {
// needs to be a snapshot test because jsdom does auto-correct the attribute casing
let x = 'test';
let y = () => 'test';
- $$payload.out += `
`;
+ $$payload.out += `
`;
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js
index 80f2da11a2..c0626bd416 100644
--- a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
export default function Each_string_template($$anchor) {
var fragment = $.comment();
@@ -11,7 +11,7 @@ export default function Each_string_template($$anchor) {
var text = $.text();
- $.template_effect(() => $.set_text(text, `${thing ?? ""}, `));
+ $.template_effect(() => $.set_text(text, `${thing ?? ''}, `));
$.append($$anchor, text);
});
diff --git a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js
index d4debe1727..4386c22ebe 100644
--- a/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/each-string-template/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Each_string_template($$payload) {
const each_array = $.ensure_array_like(['foo', 'bar', 'baz']);
diff --git a/packages/svelte/tests/snapshot/samples/export-state/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/export-state/_expected/client/index.svelte.js
index bab47c8c50..c2a6054bc6 100644
--- a/packages/svelte/tests/snapshot/samples/export-state/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/export-state/_expected/client/index.svelte.js
@@ -1,4 +1,4 @@
/* index.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/client";
+import * as $ from 'svelte/internal/client';
export const object = $.proxy({ ok: true });
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/export-state/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/export-state/_expected/server/index.svelte.js
index a3b619df6e..1f6c244212 100644
--- a/packages/svelte/tests/snapshot/samples/export-state/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/export-state/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
/* index.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export const object = { ok: true };
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js
index 95d1c72017..c545608bca 100644
--- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
export default function Function_prop_no_getter($$anchor) {
let count = $.state(0);
@@ -19,7 +19,7 @@ export default function Function_prop_no_getter($$anchor) {
var text = $.text();
- $.template_effect(() => $.set_text(text, `clicks: ${$.get(count) ?? ""}`));
+ $.template_effect(() => $.set_text(text, `clicks: ${$.get(count) ?? ''}`));
$.append($$anchor, text);
},
$$slots: { default: true }
diff --git a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js
index 05b343d821..88f6f55ee7 100644
--- a/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/function-prop-no-getter/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Function_prop_no_getter($$payload) {
let count = 0;
diff --git a/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js
index 9f6f291669..899c126001 100644
--- a/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hello-world/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
var root = $.template(`hello world `);
diff --git a/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
index a313799dfd..8766fb1300 100644
--- a/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hello-world/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Hello_world($$payload) {
$$payload.out += `hello world `;
diff --git a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js
index 86c2880abc..3c8322500b 100644
--- a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
var root = $.template(`hello world `);
diff --git a/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
index 33fe307c09..959e0a403e 100644
--- a/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/hmr/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Hmr($$payload) {
$$payload.out += `hello world `;
diff --git a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/index.svelte.js
index 9c7d2f3f23..ebbe191dcb 100644
--- a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
import { random } from './module.svelte';
export default function Imports_in_modules($$anchor) {
diff --git a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/module.svelte.js b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/module.svelte.js
index 6edbc8af77..0d366e6258 100644
--- a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/module.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/client/module.svelte.js
@@ -1,5 +1,5 @@
/* module.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/client";
+import * as $ from 'svelte/internal/client';
import { random } from './export';
export { random };
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/index.svelte.js
index 35b64b4186..4cd6bc59d7 100644
--- a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
import { random } from './module.svelte';
export default function Imports_in_modules($$payload) {
diff --git a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/module.svelte.js b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/module.svelte.js
index e51aae5a25..2e0af8af84 100644
--- a/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/module.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/imports-in-modules/_expected/server/module.svelte.js
@@ -1,5 +1,5 @@
/* module.svelte.js generated by Svelte VERSION */
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
import { random } from './export';
export { random };
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.js
index 2a10dbc1b1..5a46b9bbef 100644
--- a/packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/props-identifier/_expected/client/index.svelte.js
@@ -1,10 +1,10 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
export default function Props_identifier($$anchor, $$props) {
$.push($$props, true);
- let props = $.rest_props($$props, ["$$slots", "$$events", "$$legacy"]);
+ let props = $.rest_props($$props, ['$$slots', '$$events', '$$legacy']);
$$props.a;
props[a];
diff --git a/packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.js
index 6fef87d63b..33a3633939 100644
--- a/packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/props-identifier/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Props_identifier($$payload, $$props) {
$.push();
diff --git a/packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js
index 0a627a55ae..940ed8f9e8 100644
--- a/packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/purity/_expected/client/index.svelte.js
@@ -1,6 +1,6 @@
-import "svelte/internal/disclose-version";
-import "svelte/internal/flags/legacy";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import 'svelte/internal/flags/legacy';
+import * as $ from 'svelte/internal/client';
var root = $.template(`
`, 1);
diff --git a/packages/svelte/tests/snapshot/samples/purity/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/purity/_expected/server/index.svelte.js
index 1eea71e4dd..588332407a 100644
--- a/packages/svelte/tests/snapshot/samples/purity/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/purity/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Purity($$payload) {
$$payload.out += `${$.escape(Math.max(0, Math.min(0, 100)))}
${$.escape(location.href)}
`;
diff --git a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js
index 8dd7df82cf..9b203b97e8 100644
--- a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
var root = $.template(` we don't need to traverse these nodes
or
these
ones
these
trailing
nodes
can
be
completely
ignored
a `, 3);
@@ -20,7 +20,7 @@ export default function Skip_static_subtree($$anchor, $$props) {
var cant_skip = $.sibling(main, 2);
var custom_elements = $.child(cant_skip);
- $.set_custom_element_data(custom_elements, "with", "attributes");
+ $.set_custom_element_data(custom_elements, 'with', 'attributes');
$.reset(cant_skip);
var div = $.sibling(cant_skip, 2);
@@ -38,7 +38,7 @@ export default function Skip_static_subtree($$anchor, $$props) {
var select = $.sibling(div_1, 2);
var option = $.child(select);
- option.value = null == (option.__value = "a") ? "" : "a";
+ option.value = null == (option.__value = 'a') ? '' : 'a';
$.reset(select);
var img = $.sibling(select, 2);
diff --git a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js
index 309f5a2b57..e694c12647 100644
--- a/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/skip-static-subtree/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Skip_static_subtree($$payload, $$props) {
let { title, content } = $$props;
diff --git a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js
index c24023c8a4..a67210e541 100644
--- a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
function reset(_, str, tpl) {
$.set(str, '');
@@ -30,4 +30,4 @@ export default function State_proxy_literal($$anchor) {
$.append($$anchor, fragment);
}
-$.delegate(["click"]);
\ No newline at end of file
+$.delegate(['click']);
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
index 3424f807ab..7b2a884d70 100644
--- a/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/state-proxy-literal/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function State_proxy_literal($$payload) {
let str = '';
@@ -11,5 +11,5 @@ export default function State_proxy_literal($$payload) {
tpl = ``;
}
- $$payload.out += ` reset `;
+ $$payload.out += ` reset `;
}
\ No newline at end of file
diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js
index a4bbea582b..2270005ee0 100644
--- a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/client/index.svelte.js
@@ -1,8 +1,8 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
export default function Svelte_element($$anchor, $$props) {
- let tag = $.prop($$props, "tag", 3, 'hr');
+ let tag = $.prop($$props, 'tag', 3, 'hr');
var fragment = $.comment();
var node = $.first_child(fragment);
diff --git a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
index 4a766f7de5..4426ad1164 100644
--- a/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/svelte-element/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Svelte_element($$payload, $$props) {
let { tag = 'hr' } = $$props;
diff --git a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js
index 8ba14526aa..8e343fcf36 100644
--- a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/client/index.svelte.js
@@ -1,5 +1,5 @@
-import "svelte/internal/disclose-version";
-import * as $ from "svelte/internal/client";
+import 'svelte/internal/disclose-version';
+import * as $ from 'svelte/internal/client';
var root = $.template(`
`);
@@ -16,8 +16,8 @@ export default function Text_nodes_deriveds($$anchor) {
}
var p = root();
- const stringified_text = $.derived(() => text1() ?? "");
- const stringified_text_1 = $.derived(() => text2() ?? "");
+ const stringified_text = $.derived(() => text1() ?? '');
+ const stringified_text_1 = $.derived(() => text2() ?? '');
var text = $.child(p);
$.template_effect(() => $.set_text(text, `${$.get(stringified_text)}${$.get(stringified_text_1)}`));
diff --git a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/server/index.svelte.js b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/server/index.svelte.js
index f7dc4176e4..6f019647f5 100644
--- a/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/server/index.svelte.js
+++ b/packages/svelte/tests/snapshot/samples/text-nodes-deriveds/_expected/server/index.svelte.js
@@ -1,4 +1,4 @@
-import * as $ from "svelte/internal/server";
+import * as $ from 'svelte/internal/server';
export default function Text_nodes_deriveds($$payload) {
let count1 = 0;
diff --git a/packages/svelte/tests/sourcemaps/samples/css-injected-map/_config.js b/packages/svelte/tests/sourcemaps/samples/css-injected-map/_config.js
index 74a2185076..c2b2fe766a 100644
--- a/packages/svelte/tests/sourcemaps/samples/css-injected-map/_config.js
+++ b/packages/svelte/tests/sourcemaps/samples/css-injected-map/_config.js
@@ -30,7 +30,7 @@ export default test({
async test({ assert, code_client }) {
// Check that the css source map embedded in the js is accurate
const match = code_client.match(
- /code: "(.*?)(?:\\n\/\*# sourceMappingURL=data:(.*?);charset=(.*?);base64,(.*?) \*\/)?"/
+ /code: '(.*?)(?:\\n\/\*# sourceMappingURL=data:(.*?);charset=(.*?);base64,(.*?) \*\/)?'/
);
assert.ok(match);
diff --git a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
index a1628842fb..0a759da957 100644
--- a/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
+++ b/packages/svelte/tests/validator/samples/a11y-click-events-have-key-events/warnings.json
@@ -1,7 +1,7 @@
[
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 13,
"column": 0
@@ -13,7 +13,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 15,
"column": 0
@@ -25,7 +25,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 18,
"column": 0
@@ -37,7 +37,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 20,
"column": 0
@@ -49,7 +49,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 22,
"column": 0
@@ -61,7 +61,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 24,
"column": 0
@@ -73,7 +73,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 26,
"column": 0
@@ -85,7 +85,7 @@
},
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"line": 28,
"column": 0
diff --git a/packages/svelte/tests/validator/samples/slot-warning/warnings.json b/packages/svelte/tests/validator/samples/slot-warning/warnings.json
index a390d1d348..c146a7d716 100644
--- a/packages/svelte/tests/validator/samples/slot-warning/warnings.json
+++ b/packages/svelte/tests/validator/samples/slot-warning/warnings.json
@@ -1,7 +1,7 @@
[
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"column": 1,
"line": 7
diff --git a/packages/svelte/tests/validator/samples/slot-warning2/warnings.json b/packages/svelte/tests/validator/samples/slot-warning2/warnings.json
index 7a273cda5d..b8b9876ebb 100644
--- a/packages/svelte/tests/validator/samples/slot-warning2/warnings.json
+++ b/packages/svelte/tests/validator/samples/slot-warning2/warnings.json
@@ -1,7 +1,7 @@
[
{
"code": "a11y_click_events_have_key_events",
- "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate. See https://svelte.dev/docs/accessibility-warnings#a11y-click-events-have-key-events for more details",
+ "message": "Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `` or `` might be more appropriate",
"start": {
"column": 1,
"line": 8
diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts
index d422abebbc..d00b2b01ed 100644
--- a/packages/svelte/types/index.d.ts
+++ b/packages/svelte/types/index.d.ts
@@ -275,7 +275,7 @@ declare module 'svelte' {
* ```
* You can only call a snippet through the `{@render ...}` tag.
*
- * https://svelte.dev/docs/svelte/snippet
+ * See the [snippet documentation](https://svelte.dev/docs/svelte/snippet) for more info.
*
* @template Parameters the parameters that the snippet expects (if any) as a tuple.
*/
@@ -1339,8 +1339,6 @@ declare module 'svelte/compiler' {
} | undefined): Promise;
/**
* The current version, as set in package.json.
- *
- * https://svelte.dev/docs/svelte-compiler#svelte-version
* */
export const VERSION: string;
/**
@@ -3091,7 +3089,7 @@ declare namespace $inspect {
* });
*
*/
- export function trace(name: string): void;
+ export function trace(name?: string): void;
// prevent intellisense from being unhelpful
/** @deprecated */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f7f38700e4..731bb97edb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -80,12 +80,15 @@ importers:
axobject-query:
specifier: ^4.1.0
version: 4.1.0
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
esm-env:
specifier: ^1.2.1
version: 1.2.1
esrap:
- specifier: ^1.3.2
- version: 1.3.2
+ specifier: ^1.4.2
+ version: 1.4.2
is-reference:
specifier: ^3.0.3
version: 3.0.3
@@ -890,6 +893,10 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -1111,8 +1118,8 @@ packages:
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
engines: {node: '>=0.10'}
- esrap@1.3.2:
- resolution: {integrity: sha512-C4PXusxYhFT98GjLSmb20k9PREuUdporer50dhzGuJu9IJXktbMddVCMLAERl5dAHyAi73GWWCE4FVHGP1794g==}
+ esrap@1.4.2:
+ resolution: {integrity: sha512-FhVlJzvTw7ZLxYZ7RyHwQCFE64dkkpzGNNnphaGCLwjqGk1SQcqzbgdx9FowPCktx6NOSHkzvcZ3vsvdH54YXA==}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
@@ -3055,6 +3062,8 @@ snapshots:
ci-info@3.9.0: {}
+ clsx@2.1.1: {}
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -3315,7 +3324,7 @@ snapshots:
dependencies:
estraverse: 5.3.0
- esrap@1.3.2:
+ esrap@1.4.2:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0