diff --git a/.changeset/wet-pears-buy.md b/.changeset/wet-pears-buy.md new file mode 100644 index 0000000000..b4cf666950 --- /dev/null +++ b/.changeset/wet-pears-buy.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +feat: allow non-synchronous legacy component instantiation diff --git a/packages/svelte/src/index.d.ts b/packages/svelte/src/index.d.ts index 79d048b815..3955f14dc2 100644 --- a/packages/svelte/src/index.d.ts +++ b/packages/svelte/src/index.d.ts @@ -17,6 +17,8 @@ export interface ComponentConstructorOptions< context?: Map; hydrate?: boolean; intro?: boolean; + recover?: boolean; + sync?: boolean; $$inline?: boolean; } diff --git a/packages/svelte/src/legacy/legacy-client.js b/packages/svelte/src/legacy/legacy-client.js index ff145f3fb2..23f00bc30a 100644 --- a/packages/svelte/src/legacy/legacy-client.js +++ b/packages/svelte/src/legacy/legacy-client.js @@ -17,9 +17,6 @@ import { define_property } from '../internal/shared/utils.js'; * * @param {ComponentConstructorOptions & { * component: ComponentType> | Component; - * immutable?: boolean; - * hydrate?: boolean; - * recover?: boolean; * }} options * @returns {SvelteComponent & Exports} */ @@ -64,9 +61,6 @@ class Svelte4Component { /** * @param {ComponentConstructorOptions & { * component: any; - * immutable?: boolean; - * hydrate?: boolean; - * recover?: false; * }} options */ constructor(options) { @@ -110,8 +104,8 @@ class Svelte4Component { recover: options.recover }); - // We don't flush_sync for custom element wrappers - if (!options?.props?.$$host) { + // We don't flush_sync for custom element wrappers or if the user doesn't want it + if (!options?.props?.$$host || options.sync === false) { flush_sync(); } diff --git a/packages/svelte/tests/runtime-legacy/shared.ts b/packages/svelte/tests/runtime-legacy/shared.ts index 640e9a49ee..1474641c94 100644 --- a/packages/svelte/tests/runtime-legacy/shared.ts +++ b/packages/svelte/tests/runtime-legacy/shared.ts @@ -351,7 +351,6 @@ async function run_test_variant( component: mod.default, props: config.props, target, - immutable: config.immutable, intro: config.intro, recover: config.recover ?? false, hydrate: variant === 'hydrate' diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts index 6f41adfa3d..cefb0134a0 100644 --- a/packages/svelte/types/index.d.ts +++ b/packages/svelte/types/index.d.ts @@ -14,6 +14,8 @@ declare module 'svelte' { context?: Map; hydrate?: boolean; intro?: boolean; + recover?: boolean; + sync?: boolean; $$inline?: boolean; } @@ -2101,9 +2103,6 @@ declare module 'svelte/legacy' { * */ export function createClassComponent, Exports extends Record, Events extends Record, Slots extends Record>(options: ComponentConstructorOptions & { component: ComponentType> | Component; - immutable?: boolean; - hydrate?: boolean; - recover?: boolean; }): SvelteComponent & Exports; /** * Takes the component function and returns a Svelte 4 compatible component constructor.