From fd023fbff2fabc73d04d12fca8b071ff3c4fd519 Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Thu, 22 Jan 2026 16:26:25 +0100 Subject: [PATCH] feat: add `beforeMount` callback to `MountOptions` --- .changeset/cyan-kings-wait.md | 5 +++++ packages/svelte/src/index.d.ts | 4 ++++ packages/svelte/src/internal/client/render.js | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .changeset/cyan-kings-wait.md diff --git a/.changeset/cyan-kings-wait.md b/.changeset/cyan-kings-wait.md new file mode 100644 index 0000000000..8381b6305c --- /dev/null +++ b/.changeset/cyan-kings-wait.md @@ -0,0 +1,5 @@ +--- +'svelte': minor +--- + +feat: add `beforeMount` callback to `MountOptions` diff --git a/packages/svelte/src/index.d.ts b/packages/svelte/src/index.d.ts index a1782f5b61..7fd64c15c8 100644 --- a/packages/svelte/src/index.d.ts +++ b/packages/svelte/src/index.d.ts @@ -333,6 +333,10 @@ export type MountOptions = Record * Can be accessed via `getContext()` at the component level. */ context?: Map; + /** + * A function invoked before the component is mounted but after the component context has been initialized. + */ + beforeMount?: () => void; /** * Whether or not to play transitions on initial render. * @default true diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index c76f0b1ce7..6d7046a111 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -158,7 +158,10 @@ const document_listeners = new Map(); * @param {MountOptions} options * @returns {Exports} */ -function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) { +function _mount( + Component, + { target, anchor, props = {}, beforeMount, events, context, intro = true } +) { init_operations(); /** @type {Set} */ @@ -214,6 +217,8 @@ function _mount(Component, { target, anchor, props = {}, events, context, intro ctx.c = context; } + beforeMount?.(); + if (events) { // We can't spread the object or else we'd lose the state proxy stuff, if it is one /** @type {any} */ (props).$$events = events;