From a65a4c09a81c27a3919c6fb5e6668d7229f2a9a8 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 1 Jun 2025 13:49:02 -0700 Subject: [PATCH 1/9] remove site scripts (#16055) --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 70e85438f0..62581782d7 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,10 @@ }, "scripts": { "build": "pnpm -r --filter=./packages/* build", - "build:sites": "pnpm -r --filter=./sites/* build", - "preview-site": "npm run build --prefix sites/svelte-5-preview", "check": "cd packages/svelte && pnpm build && cd ../../ && pnpm -r check", "lint": "eslint && prettier --check .", "format": "prettier --write .", "test": "vitest run", - "test-output": "vitest run --coverage --reporter=json --outputFile=sites/svelte-5-preview/src/routes/status/results.json", "changeset:version": "changeset version && pnpm -r generate:version && git add --all", "changeset:publish": "changeset publish", "bench": "node --allow-natives-syntax ./benchmarking/run.js", From 817509142301247c6d17eb0ff888d9a69f784f8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 1 Jun 2025 16:49:52 -0400 Subject: [PATCH 2/9] Version Packages (#16054) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/rude-drinks-relate.md | 5 ----- packages/svelte/CHANGELOG.md | 6 ++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 .changeset/rude-drinks-relate.md diff --git a/.changeset/rude-drinks-relate.md b/.changeset/rude-drinks-relate.md deleted file mode 100644 index d0eab6ba11..0000000000 --- a/.changeset/rude-drinks-relate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: correctly transform reassignments to class fields in SSR mode diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 4623f64766..a7c08cc1aa 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,11 @@ # svelte +## 5.33.12 + +### Patch Changes + +- fix: correctly transform reassignments to class fields in SSR mode ([#16051](https://github.com/sveltejs/svelte/pull/16051)) + ## 5.33.11 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 2ee065730c..866a6ecc61 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.33.11", + "version": "5.33.12", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index 4cbf73e7f9..555ca54282 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -4,5 +4,5 @@ * The current version, as set in package.json. * @type {string} */ -export const VERSION = '5.33.11'; +export const VERSION = '5.33.12'; export const PUBLIC_VERSION = '5'; From 6a3066519cdcab1559dda6fc12707b48c5f5e823 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 1 Jun 2025 17:27:52 -0700 Subject: [PATCH 3/9] fix: avoid recursion error in `EachBlock` visitor (#16058) --- .changeset/proud-pumpkins-train.md | 5 +++++ .../src/compiler/phases/2-analyze/visitors/EachBlock.js | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 .changeset/proud-pumpkins-train.md diff --git a/.changeset/proud-pumpkins-train.md b/.changeset/proud-pumpkins-train.md new file mode 100644 index 0000000000..11d09aeb80 --- /dev/null +++ b/.changeset/proud-pumpkins-train.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: avoid recursion error in `EachBlock` visitor diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/EachBlock.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/EachBlock.js index 0ebfa563cf..e6a83921b1 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/EachBlock.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/EachBlock.js @@ -77,6 +77,9 @@ export function EachBlock(node, context) { * @returns {void} */ function collect_transitive_dependencies(binding, bindings) { + if (bindings.has(binding)) { + return; + } bindings.add(binding); if (binding.kind === 'legacy_reactive') { From 194f5b34fd87153e6e93e3cd00a4de24a4f53861 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 1 Jun 2025 20:42:52 -0400 Subject: [PATCH 4/9] Version Packages (#16059) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/proud-pumpkins-train.md | 5 ----- packages/svelte/CHANGELOG.md | 6 ++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) delete mode 100644 .changeset/proud-pumpkins-train.md diff --git a/.changeset/proud-pumpkins-train.md b/.changeset/proud-pumpkins-train.md deleted file mode 100644 index 11d09aeb80..0000000000 --- a/.changeset/proud-pumpkins-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: avoid recursion error in `EachBlock` visitor diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index a7c08cc1aa..6cbd262955 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,11 @@ # svelte +## 5.33.13 + +### Patch Changes + +- fix: avoid recursion error in `EachBlock` visitor ([#16058](https://github.com/sveltejs/svelte/pull/16058)) + ## 5.33.12 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 866a6ecc61..b9c087d774 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.33.12", + "version": "5.33.13", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index 555ca54282..b876086212 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -4,5 +4,5 @@ * The current version, as set in package.json. * @type {string} */ -export const VERSION = '5.33.12'; +export const VERSION = '5.33.13'; export const PUBLIC_VERSION = '5'; From 77a5d68675beb2ad1d5b8c2813b1b1d6b61ad92e Mon Sep 17 00:00:00 2001 From: Jack Goodall Date: Mon, 2 Jun 2025 14:37:09 +0200 Subject: [PATCH 5/9] also mention that `:has` is scoped in the migration guide (#16061) --- documentation/docs/07-misc/07-v5-migration-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/07-misc/07-v5-migration-guide.md b/documentation/docs/07-misc/07-v5-migration-guide.md index e502b7921a..c24c1febee 100644 --- a/documentation/docs/07-misc/07-v5-migration-guide.md +++ b/documentation/docs/07-misc/07-v5-migration-guide.md @@ -833,9 +833,9 @@ Svelte 5 is more strict about the HTML structure and will throw a compiler error Assignments to destructured parts of a `@const` declaration are no longer allowed. It was an oversight that this was ever allowed. -### :is(...) and :where(...) are scoped +### :is(...), :has(...), and :where(...) are scoped -Previously, Svelte did not analyse selectors inside `:is(...)` and `:where(...)`, effectively treating them as global. Svelte 5 analyses them in the context of the current component. As such, some selectors may now be treated as unused if they were relying on this treatment. To fix this, use `:global(...)` inside the `:is(...)/:where(...)` selectors. +Previously, Svelte did not analyse selectors inside `:is(...)`, `:has(...)`, and `:where(...)`, effectively treating them as global. Svelte 5 analyses them in the context of the current component. As such, some selectors may now be treated as unused if they were relying on this treatment. To fix this, use `:global(...)` inside the `:is(...)/:has(...)/:where(...)` selectors. When using Tailwind's `@apply` directive, add a `:global` selector to preserve rules that use Tailwind-generated `:is(...)` selectors: From b851b54e9de3239730284a42df992d0c22a61c22 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 2 Jun 2025 09:08:49 -0400 Subject: [PATCH 6/9] Revert "feat: enable TS autocomplete for Svelte HTML element definitions" (#16063) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "feat: enable TS autocomplete for Svelte HTML element definitions (#15…" This reverts commit 6928aaca06d8bcc37d17ce715ed04221d6eccc72. * changeset --- .changeset/dry-squids-compete.md | 5 +++++ packages/svelte/elements.d.ts | 2 +- packages/svelte/svelte-html.d.ts | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 .changeset/dry-squids-compete.md diff --git a/.changeset/dry-squids-compete.md b/.changeset/dry-squids-compete.md new file mode 100644 index 0000000000..a5edf0eae5 --- /dev/null +++ b/.changeset/dry-squids-compete.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +Revert "feat: enable TS autocomplete for Svelte HTML element definitions" diff --git a/packages/svelte/elements.d.ts b/packages/svelte/elements.d.ts index 0172b0e358..7a7889ad9e 100644 --- a/packages/svelte/elements.d.ts +++ b/packages/svelte/elements.d.ts @@ -2066,7 +2066,7 @@ export interface SvelteHTMLElements { failed?: import('svelte').Snippet<[error: unknown, reset: () => void]>; }; - [name: string & {}]: { [name: string]: any }; + [name: string]: { [name: string]: any }; } export type ClassValue = string | import('clsx').ClassArray | import('clsx').ClassDictionary; diff --git a/packages/svelte/svelte-html.d.ts b/packages/svelte/svelte-html.d.ts index 6e37cc93e8..5042eaa4b8 100644 --- a/packages/svelte/svelte-html.d.ts +++ b/packages/svelte/svelte-html.d.ts @@ -8,7 +8,7 @@ import * as svelteElements from './elements.js'; /** * @internal do not use */ -type HTMLProps = Omit< +type HTMLProps = Omit< import('./elements.js').SvelteHTMLElements[Property], keyof Override > & @@ -250,7 +250,7 @@ declare global { }; // don't type svelte:options, it would override the types in svelte/elements and it isn't extendable anyway - [name: string & {}]: { [name: string]: any }; + [name: string]: { [name: string]: any }; } } } From 1b5f6af276ae1a8987968442625f10a38dbf57ba Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Mon, 2 Jun 2025 21:56:39 +0200 Subject: [PATCH 7/9] fix: destructuring snippet arguments (#16068) --- .changeset/violet-actors-teach.md | 5 +++++ .../phases/3-transform/client/visitors/SnippetBlock.js | 2 +- .../samples/snippet-destructure-array/_config.js | 5 +++++ .../samples/snippet-destructure-array/main.svelte | 9 +++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .changeset/violet-actors-teach.md create mode 100644 packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/main.svelte diff --git a/.changeset/violet-actors-teach.md b/.changeset/violet-actors-teach.md new file mode 100644 index 0000000000..39ce420226 --- /dev/null +++ b/.changeset/violet-actors-teach.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: destructuring snippet arguments diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js index 0809aa21b2..203cf62b37 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SnippetBlock.js @@ -57,7 +57,7 @@ export function SnippetBlock(node, context) { for (const path of paths) { const name = /** @type {Identifier} */ (path.node).name; const needs_derived = path.has_default_value; // to ensure that default value is only called once - const fn = b.thunk(/** @type {Expression} */ (context.visit(path.expression))); + const fn = b.thunk(/** @type {Expression} */ (context.visit(path.expression, child_state))); declarations.push(b.let(path.node, needs_derived ? b.call('$.derived_safe_equal', fn) : fn)); diff --git a/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/_config.js b/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/_config.js new file mode 100644 index 0000000000..05e3e80b79 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: `a` +}); diff --git a/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/main.svelte b/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/main.svelte new file mode 100644 index 0000000000..37345c629e --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/snippet-destructure-array/main.svelte @@ -0,0 +1,9 @@ + + +{#snippet content([x])} + {x} +{/snippet} + +{@render content(array)} \ No newline at end of file From 335779dcf5f246fdfa01571fe5c03b8c9a09c351 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 16:00:25 -0400 Subject: [PATCH 8/9] Version Packages (#16064) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/dry-squids-compete.md | 5 ----- .changeset/violet-actors-teach.md | 5 ----- packages/svelte/CHANGELOG.md | 8 ++++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 5 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 .changeset/dry-squids-compete.md delete mode 100644 .changeset/violet-actors-teach.md diff --git a/.changeset/dry-squids-compete.md b/.changeset/dry-squids-compete.md deleted file mode 100644 index a5edf0eae5..0000000000 --- a/.changeset/dry-squids-compete.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"svelte": patch ---- - -Revert "feat: enable TS autocomplete for Svelte HTML element definitions" diff --git a/.changeset/violet-actors-teach.md b/.changeset/violet-actors-teach.md deleted file mode 100644 index 39ce420226..0000000000 --- a/.changeset/violet-actors-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: destructuring snippet arguments diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 6cbd262955..c272603457 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,13 @@ # svelte +## 5.33.14 + +### Patch Changes + +- Revert "feat: enable TS autocomplete for Svelte HTML element definitions" ([#16063](https://github.com/sveltejs/svelte/pull/16063)) + +- fix: destructuring snippet arguments ([#16068](https://github.com/sveltejs/svelte/pull/16068)) + ## 5.33.13 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index b9c087d774..f097ef870c 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.33.13", + "version": "5.33.14", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index b876086212..4c6213b0ce 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -4,5 +4,5 @@ * The current version, as set in package.json. * @type {string} */ -export const VERSION = '5.33.13'; +export const VERSION = '5.33.14'; export const PUBLIC_VERSION = '5'; From 2342c8719a555783ba1d6d4a6dec3c2e30dca8e0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 2 Jun 2025 16:31:03 -0400 Subject: [PATCH 9/9] chore: better HTML normalization test helper (#16056) * chore: better HTML normalization test helper * simplify * simplify/robustify * tweak * Apply suggestions from code review Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --- packages/svelte/tests/html_equal.js | 198 ++++++++++-------- .../samples/binding-select/_config.js | 4 +- .../samples/input-list/_config.js | 4 +- .../samples/namespace-html/_config.js | 2 +- .../samples/select-in-each/_config.js | 4 +- .../svelte/tests/runtime-legacy/shared.ts | 6 +- 6 files changed, 118 insertions(+), 100 deletions(-) diff --git a/packages/svelte/tests/html_equal.js b/packages/svelte/tests/html_equal.js index 4c9e2a7253..6948d8db32 100644 --- a/packages/svelte/tests/html_equal.js +++ b/packages/svelte/tests/html_equal.js @@ -1,8 +1,20 @@ import { assert } from 'vitest'; -/** @param {Element} node */ -function clean_children(node) { +/** + * @param {Element} node + * @param {{ preserveComments: boolean }} opts + */ +function clean_children(node, opts) { let previous = null; + let has_element_children = false; + let template = + node.nodeName === 'TEMPLATE' ? /** @type {HTMLTemplateElement} */ (node) : undefined; + + if (template) { + const div = document.createElement('div'); + div.append(template.content); + node = div; + } // sort attributes const attributes = Array.from(node.attributes).sort((a, b) => { @@ -14,6 +26,11 @@ function clean_children(node) { }); attributes.forEach((attr) => { + // Strip out the special onload/onerror hydration events from the test output + if ((attr.name === 'onload' || attr.name === 'onerror') && attr.value === 'this.__e=event') { + return; + } + node.setAttribute(attr.name, attr.value); }); @@ -27,24 +44,43 @@ function clean_children(node) { node.tagName !== 'tspan' ) { node.removeChild(child); + continue; } - text.data = text.data.replace(/[ \t\n\r\f]+/g, '\n'); + text.data = text.data.replace(/[^\S]+/g, ' '); if (previous && previous.nodeType === 3) { const prev = /** @type {Text} */ (previous); prev.data += text.data; - prev.data = prev.data.replace(/[ \t\n\r\f]+/g, '\n'); - node.removeChild(text); + text = prev; + text.data = text.data.replace(/[^\S]+/g, ' '); + + continue; } - } else if (child.nodeType === 8) { + } + + if (child.nodeType === 8 && !opts.preserveComments) { // comment - // do nothing - } else { - clean_children(/** @type {Element} */ (child)); + child.remove(); + continue; + } + + // add newlines for better readability and potentially recurse into children + if (child.nodeType === 1 || child.nodeType === 8) { + if (previous?.nodeType === 3) { + const prev = /** @type {Text} */ (previous); + prev.data = prev.data.replace(/^[^\S]+$/, '\n'); + } else if (previous?.nodeType === 1 || previous?.nodeType === 8) { + node.insertBefore(document.createTextNode('\n'), child); + } + + if (child.nodeType === 1) { + has_element_children = true; + clean_children(/** @type {Element} */ (child), opts); + } } previous = child; @@ -53,37 +89,36 @@ function clean_children(node) { // collapse whitespace if (node.firstChild && node.firstChild.nodeType === 3) { const text = /** @type {Text} */ (node.firstChild); - text.data = text.data.replace(/^[ \t\n\r\f]+/, ''); - if (!text.data.length) node.removeChild(text); + text.data = text.data.trimStart(); } if (node.lastChild && node.lastChild.nodeType === 3) { const text = /** @type {Text} */ (node.lastChild); - text.data = text.data.replace(/[ \t\n\r\f]+$/, ''); - if (!text.data.length) node.removeChild(text); + text.data = text.data.trimEnd(); + } + + // indent code for better readability + if (has_element_children && node.parentNode) { + node.innerHTML = `\n\ ${node.innerHTML.replace(/\n/g, '\n ')}\n`; + } + + if (template) { + template.innerHTML = node.innerHTML; } } /** * @param {Window} window * @param {string} html - * @param {{ removeDataSvelte?: boolean, preserveComments?: boolean }} param2 + * @param {{ preserveComments?: boolean }} opts */ -export function normalize_html( - window, - html, - { removeDataSvelte = false, preserveComments = false } -) { +export function normalize_html(window, html, { preserveComments = false } = {}) { try { const node = window.document.createElement('div'); - node.innerHTML = html - .replace(/()/g, preserveComments ? '$1' : '') - .replace(/(data-svelte-h="[^"]+")/g, removeDataSvelte ? '' : '$1') - .replace(/>[ \t\n\r\f]+<') - // Strip out the special onload/onerror hydration events from the test output - .replace(/\s?onerror="this.__e=event"|\s?onload="this.__e=event"/g, '') - .trim(); - clean_children(node); + + node.innerHTML = html.trim(); + clean_children(node, { preserveComments }); + return node.innerHTML; } catch (err) { throw new Error(`Failed to normalize HTML:\n${html}\nCause: ${err}`); @@ -99,67 +134,52 @@ export function normalize_new_line(html) { } /** - * @param {{ removeDataSvelte?: boolean }} options + * @param {string} actual + * @param {string} expected + * @param {string} [message] */ -export function setup_html_equal(options = {}) { - /** - * @param {string} actual - * @param {string} expected - * @param {string} [message] - */ - const assert_html_equal = (actual, expected, message) => { - try { - assert.deepEqual( - normalize_html(window, actual, options), - normalize_html(window, expected, options), - message - ); - } catch (e) { - if (Error.captureStackTrace) - Error.captureStackTrace(/** @type {Error} */ (e), assert_html_equal); - throw e; - } - }; - - /** - * - * @param {string} actual - * @param {string} expected - * @param {{ preserveComments?: boolean, withoutNormalizeHtml?: boolean }} param2 - * @param {string} [message] - */ - const assert_html_equal_with_options = ( - actual, - expected, - { preserveComments, withoutNormalizeHtml }, - message - ) => { - try { - assert.deepEqual( - withoutNormalizeHtml - ? normalize_new_line(actual.trim()) - .replace(/(\sdata-svelte-h="[^"]+")/g, options.removeDataSvelte ? '' : '$1') - .replace(/()/g, preserveComments !== false ? '$1' : '') - : normalize_html(window, actual.trim(), { ...options, preserveComments }), - withoutNormalizeHtml - ? normalize_new_line(expected.trim()) - .replace(/(\sdata-svelte-h="[^"]+")/g, options.removeDataSvelte ? '' : '$1') - .replace(/()/g, preserveComments !== false ? '$1' : '') - : normalize_html(window, expected.trim(), { ...options, preserveComments }), - message - ); - } catch (e) { - if (Error.captureStackTrace) - Error.captureStackTrace(/** @type {Error} */ (e), assert_html_equal_with_options); - throw e; - } - }; - - return { - assert_html_equal, - assert_html_equal_with_options - }; -} +export const assert_html_equal = (actual, expected, message) => { + try { + assert.deepEqual(normalize_html(window, actual), normalize_html(window, expected), message); + } catch (e) { + if (Error.captureStackTrace) + Error.captureStackTrace(/** @type {Error} */ (e), assert_html_equal); + throw e; + } +}; -// Common case without options -export const { assert_html_equal, assert_html_equal_with_options } = setup_html_equal(); +/** + * + * @param {string} actual + * @param {string} expected + * @param {{ preserveComments?: boolean, withoutNormalizeHtml?: boolean }} param2 + * @param {string} [message] + */ +export const assert_html_equal_with_options = ( + actual, + expected, + { preserveComments, withoutNormalizeHtml }, + message +) => { + try { + assert.deepEqual( + withoutNormalizeHtml + ? normalize_new_line(actual.trim()).replace( + /()/g, + preserveComments !== false ? '$1' : '' + ) + : normalize_html(window, actual.trim(), { preserveComments }), + withoutNormalizeHtml + ? normalize_new_line(expected.trim()).replace( + /()/g, + preserveComments !== false ? '$1' : '' + ) + : normalize_html(window, expected.trim(), { preserveComments }), + message + ); + } catch (e) { + if (Error.captureStackTrace) + Error.captureStackTrace(/** @type {Error} */ (e), assert_html_equal_with_options); + throw e; + } +}; diff --git a/packages/svelte/tests/runtime-legacy/samples/binding-select/_config.js b/packages/svelte/tests/runtime-legacy/samples/binding-select/_config.js index 2507f5fc83..996f68e39f 100644 --- a/packages/svelte/tests/runtime-legacy/samples/binding-select/_config.js +++ b/packages/svelte/tests/runtime-legacy/samples/binding-select/_config.js @@ -25,7 +25,7 @@ export default test({

selected: one

@@ -54,7 +54,7 @@ export default test({

selected: two

diff --git a/packages/svelte/tests/runtime-legacy/samples/input-list/_config.js b/packages/svelte/tests/runtime-legacy/samples/input-list/_config.js index fe6a29207d..1e95aaafa6 100644 --- a/packages/svelte/tests/runtime-legacy/samples/input-list/_config.js +++ b/packages/svelte/tests/runtime-legacy/samples/input-list/_config.js @@ -4,7 +4,9 @@ export default test({ html: ` - + + ` }); diff --git a/packages/svelte/tests/runtime-legacy/samples/namespace-html/_config.js b/packages/svelte/tests/runtime-legacy/samples/namespace-html/_config.js index 3be9f0e925..b7ecd04def 100644 --- a/packages/svelte/tests/runtime-legacy/samples/namespace-html/_config.js +++ b/packages/svelte/tests/runtime-legacy/samples/namespace-html/_config.js @@ -9,7 +9,7 @@ export default test({ - +
hi
`, diff --git a/packages/svelte/tests/runtime-legacy/samples/select-in-each/_config.js b/packages/svelte/tests/runtime-legacy/samples/select-in-each/_config.js index 4c94ea1e01..df03b7a053 100644 --- a/packages/svelte/tests/runtime-legacy/samples/select-in-each/_config.js +++ b/packages/svelte/tests/runtime-legacy/samples/select-in-each/_config.js @@ -7,7 +7,7 @@ export default test({ target.innerHTML, ` selected: a @@ -23,7 +23,7 @@ export default test({ target.innerHTML, ` selected: b diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts index 690a7e3d98..c0d1177a82 100644 --- a/packages/svelte/tests/runtime-legacy/shared.ts +++ b/packages/svelte/tests/runtime-legacy/shared.ts @@ -7,7 +7,7 @@ import { flushSync, hydrate, mount, unmount } from 'svelte'; import { render } from 'svelte/server'; import { afterAll, assert, beforeAll } from 'vitest'; import { compile_directory, fragments } from '../helpers.js'; -import { setup_html_equal } from '../html_equal.js'; +import { assert_html_equal, assert_html_equal_with_options } from '../html_equal.js'; import { raf } from '../animation-helpers.js'; import type { CompileOptions } from '#compiler'; import { suite_with_variants, type BaseTest } from '../suite.js'; @@ -86,10 +86,6 @@ function unhandled_rejection_handler(err: Error) { const listeners = process.rawListeners('unhandledRejection'); -const { assert_html_equal, assert_html_equal_with_options } = setup_html_equal({ - removeDataSvelte: true -}); - beforeAll(() => { // @ts-expect-error TODO huh? process.prependListener('unhandledRejection', unhandled_rejection_handler);