From 21dadfc997c5572730e607bd98d513437215dd06 Mon Sep 17 00:00:00 2001 From: Caique Torres <56696506+caiquetorres@users.noreply.github.com> Date: Wed, 12 Feb 2025 14:14:14 -0300 Subject: [PATCH 1/5] fix: ignore typescript abstract methods during code transformation (#15267) --- .changeset/short-fireants-talk.md | 5 +++++ .../src/compiler/phases/1-parse/remove_typescript_nodes.js | 6 ++++++ .../tests/runtime-runes/samples/typescript/main.svelte | 5 +++++ 3 files changed, 16 insertions(+) create mode 100644 .changeset/short-fireants-talk.md diff --git a/.changeset/short-fireants-talk.md b/.changeset/short-fireants-talk.md new file mode 100644 index 000000000000..c26bdc9c8ba8 --- /dev/null +++ b/.changeset/short-fireants-talk.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ignore typescript abstract methods diff --git a/packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js b/packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js index 18c805128dfe..09eb0bfa68c1 100644 --- a/packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js +++ b/packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js @@ -118,6 +118,12 @@ const visitors = { delete node.implements; return context.next(); }, + MethodDefinition(node, context) { + if (node.abstract) { + return b.empty; + } + return context.next(); + }, VariableDeclaration(node, context) { if (node.declare) { return b.empty; diff --git a/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte b/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte index cd23b31096c3..e2942b21f386 100644 --- a/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/typescript/main.svelte @@ -22,6 +22,11 @@ class MyClass implements Hello {} + abstract class MyAbstractClass { + abstract x(): void; + y() {} + } + declare const declared_const: number; declare function declared_fn(): void; declare class declared_class { From b6bf735a23b36927d7f3b2414bc0555db5d5c567 Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Thu, 13 Feb 2025 23:09:56 +0100 Subject: [PATCH 2/5] fix: correctly ssr component in `svelte:head` with `$props.id()` or `css='injected'` (#15291) --- .changeset/thirty-feet-tap.md | 5 +++++ packages/svelte/src/internal/server/index.js | 9 ++++++--- packages/svelte/src/internal/server/types.d.ts | 2 ++ .../samples/head-component-props-id/HeadNested.svelte | 5 +++++ .../samples/head-component-props-id/_config.js | 3 +++ .../samples/head-component-props-id/main.svelte | 8 ++++++++ 6 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 .changeset/thirty-feet-tap.md create mode 100644 packages/svelte/tests/server-side-rendering/samples/head-component-props-id/HeadNested.svelte create mode 100644 packages/svelte/tests/server-side-rendering/samples/head-component-props-id/_config.js create mode 100644 packages/svelte/tests/server-side-rendering/samples/head-component-props-id/main.svelte diff --git a/.changeset/thirty-feet-tap.md b/.changeset/thirty-feet-tap.md new file mode 100644 index 000000000000..5f7e58906403 --- /dev/null +++ b/.changeset/thirty-feet-tap.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: correctly ssr component in `svelte:head` with `$props.id()` or `css='injected'` diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js index c4e5d318dcd0..728f2ebc2a3c 100644 --- a/packages/svelte/src/internal/server/index.js +++ b/packages/svelte/src/internal/server/index.js @@ -34,7 +34,9 @@ export function copy_payload({ out, css, head, uid }) { css: new Set(css), head: { title: head.title, - out: head.out + out: head.out, + css: new Set(head.css), + uid: head.uid }, uid }; @@ -99,12 +101,13 @@ function props_id_generator() { * @returns {RenderOutput} */ export function render(component, options = {}) { + const uid = options.uid ?? props_id_generator(); /** @type {Payload} */ const payload = { out: '', css: new Set(), - head: { title: '', out: '' }, - uid: options.uid ?? props_id_generator() + head: { title: '', out: '', css: new Set(), uid }, + uid }; const prev_on_destroy = on_destroy; diff --git a/packages/svelte/src/internal/server/types.d.ts b/packages/svelte/src/internal/server/types.d.ts index 8a241deecd18..2fffdbbdf0bb 100644 --- a/packages/svelte/src/internal/server/types.d.ts +++ b/packages/svelte/src/internal/server/types.d.ts @@ -17,6 +17,8 @@ export interface Payload { head: { title: string; out: string; + uid: () => string; + css: Set<{ hash: string; code: string }>; }; /** Function that generates a unique ID */ uid: () => string; diff --git a/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/HeadNested.svelte b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/HeadNested.svelte new file mode 100644 index 000000000000..078420879887 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/HeadNested.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/_config.js b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/_config.js new file mode 100644 index 000000000000..f47bee71df87 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/_config.js @@ -0,0 +1,3 @@ +import { test } from '../../test'; + +export default test({}); diff --git a/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/main.svelte b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/main.svelte new file mode 100644 index 000000000000..e32b40e9eda7 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/head-component-props-id/main.svelte @@ -0,0 +1,8 @@ + + + + + + From 8b977253f3573978f3678ed0d618a6a75f32cb1a Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Fri, 14 Feb 2025 16:22:52 +0100 Subject: [PATCH 3/5] chore: fix `$props.id` tests (#15294) * chore: fix `$props.id` tests * chore: reset uid between tests --- packages/svelte/src/internal/client/dom/template.js | 4 ++++ packages/svelte/tests/runtime-legacy/shared.ts | 2 ++ .../svelte/tests/runtime-runes/samples/props-id/_config.js | 4 +--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/svelte/src/internal/client/dom/template.js b/packages/svelte/src/internal/client/dom/template.js index 6ff3b0fa19a0..575bf55cf62b 100644 --- a/packages/svelte/src/internal/client/dom/template.js +++ b/packages/svelte/src/internal/client/dom/template.js @@ -252,6 +252,10 @@ export function append(anchor, dom) { let uid = 1; +export function reset_props_id() { + uid = 1; +} + /** * Create (or hydrate) an unique UID for the component instance. */ diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts index e6dc0f385bf9..76036852c246 100644 --- a/packages/svelte/tests/runtime-legacy/shared.ts +++ b/packages/svelte/tests/runtime-legacy/shared.ts @@ -11,6 +11,7 @@ import { setup_html_equal } from '../html_equal.js'; import { raf } from '../animation-helpers.js'; import type { CompileOptions } from '#compiler'; import { suite_with_variants, type BaseTest } from '../suite.js'; +import { reset_props_id } from '../../src/internal/client/dom/template.js'; type Assert = typeof import('vitest').assert & { htmlEqual(a: string, b: string, description?: string): void; @@ -345,6 +346,7 @@ async function run_test_variant( if (runes) { props = proxy({ ...(config.props || {}) }); + reset_props_id(); if (manual_hydrate) { hydrate_fn = () => { instance = hydrate(mod.default, { diff --git a/packages/svelte/tests/runtime-runes/samples/props-id/_config.js b/packages/svelte/tests/runtime-runes/samples/props-id/_config.js index 9d91b98e0fa6..416ef6cfbea2 100644 --- a/packages/svelte/tests/runtime-runes/samples/props-id/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/props-id/_config.js @@ -43,8 +43,6 @@ export default test({ ` ); } else { - // `c6` because this runs after the `dom` tests - // (slightly brittle but good enough for now) assert.htmlEqual( target.innerHTML, ` @@ -53,7 +51,7 @@ export default test({

s2

s3

s4

-

c6

+

c1

` ); } From 7e3253745e3921d5718dce3ee5d5a9e72d471f58 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Sat, 15 Feb 2025 00:03:52 +0100 Subject: [PATCH 4/5] fix: ensure AST analysis on `svelte.js` modules succeeds (#15297) This was the result of a `@ts-expect-error` silencing other type errors, which lead to this creeping in. This changes it so that the object is fully set, so we'll get type errors when new properties need to be added fixes #15284 --- .changeset/good-spiders-own.md | 5 +++++ .../src/compiler/phases/2-analyze/index.js | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .changeset/good-spiders-own.md diff --git a/.changeset/good-spiders-own.md b/.changeset/good-spiders-own.md new file mode 100644 index 000000000000..aacbda133ee7 --- /dev/null +++ b/.changeset/good-spiders-own.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure AST analysis on `svelte.js` modules succeeds diff --git a/packages/svelte/src/compiler/phases/2-analyze/index.js b/packages/svelte/src/compiler/phases/2-analyze/index.js index 846abcf7dfc9..93c438c8529f 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/index.js +++ b/packages/svelte/src/compiler/phases/2-analyze/index.js @@ -258,8 +258,20 @@ export function analyze_module(ast, options) { { scope, scopes, - // @ts-expect-error TODO - analysis + analysis: /** @type {ComponentAnalysis} */ (analysis), + derived_state: [], + // TODO the following are not needed for modules, but we have to pass them in order to avoid type error, + // and reducing the type would result in a lot of tedious type casts elsewhere - find a good solution one day + ast_type: /** @type {any} */ (null), + component_slots: new Set(), + expression: null, + function_depth: 0, + has_props_rune: false, + instance_scope: /** @type {any} */ (null), + options: /** @type {ValidatedCompileOptions} */ (options), + parent_element: null, + reactive_statement: null, + reactive_statements: new Map() }, visitors ); From 32b78c995422c59ade2359de86f87b0cb5239e53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Feb 2025 00:05:21 +0100 Subject: [PATCH 5/5] Version Packages (#15279) Co-authored-by: github-actions[bot] --- .changeset/good-spiders-own.md | 5 ----- .changeset/short-fireants-talk.md | 5 ----- .changeset/thirty-feet-tap.md | 5 ----- packages/svelte/CHANGELOG.md | 10 ++++++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 6 files changed, 12 insertions(+), 17 deletions(-) delete mode 100644 .changeset/good-spiders-own.md delete mode 100644 .changeset/short-fireants-talk.md delete mode 100644 .changeset/thirty-feet-tap.md diff --git a/.changeset/good-spiders-own.md b/.changeset/good-spiders-own.md deleted file mode 100644 index aacbda133ee7..000000000000 --- a/.changeset/good-spiders-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: ensure AST analysis on `svelte.js` modules succeeds diff --git a/.changeset/short-fireants-talk.md b/.changeset/short-fireants-talk.md deleted file mode 100644 index c26bdc9c8ba8..000000000000 --- a/.changeset/short-fireants-talk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: ignore typescript abstract methods diff --git a/.changeset/thirty-feet-tap.md b/.changeset/thirty-feet-tap.md deleted file mode 100644 index 5f7e58906403..000000000000 --- a/.changeset/thirty-feet-tap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: correctly ssr component in `svelte:head` with `$props.id()` or `css='injected'` diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index ff3b08fe7a3f..948a9147784c 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,15 @@ # svelte +## 5.20.1 + +### Patch Changes + +- fix: ensure AST analysis on `svelte.js` modules succeeds ([#15297](https://github.com/sveltejs/svelte/pull/15297)) + +- fix: ignore typescript abstract methods ([#15267](https://github.com/sveltejs/svelte/pull/15267)) + +- fix: correctly ssr component in `svelte:head` with `$props.id()` or `css='injected'` ([#15291](https://github.com/sveltejs/svelte/pull/15291)) + ## 5.20.0 ### Minor Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index bea1efd7b425..326124383267 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.20.0", + "version": "5.20.1", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index b24607615685..9f1873efc7e8 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.20.0'; +export const VERSION = '5.20.1'; export const PUBLIC_VERSION = '5'; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy