From 551572ef4b5c1f4105184d8f3566b5c413c27731 Mon Sep 17 00:00:00 2001 From: Elliott Johnson Date: Thu, 6 Nov 2025 11:20:27 -0700 Subject: [PATCH] errors --- .../98-reference/.generated/client-errors.md | 6 ++++ .../98-reference/.generated/server-errors.md | 13 +++++++++ .../98-reference/.generated/shared-errors.md | 8 ------ .../svelte/messages/client-errors/errors.md | 4 +++ .../svelte/messages/server-errors/errors.md | 9 ++++++ .../svelte/messages/shared-errors/errors.md | 6 ---- packages/svelte/src/index-server.js | 8 +++--- packages/svelte/src/internal/client/errors.js | 17 +++++++++++ .../svelte/src/internal/client/hydratable.js | 2 +- packages/svelte/src/internal/server/errors.js | 28 +++++++++++++++++++ .../svelte/src/internal/server/hydratable.js | 2 +- packages/svelte/src/internal/shared/errors.js | 18 ------------ 12 files changed, 83 insertions(+), 38 deletions(-) diff --git a/documentation/docs/98-reference/.generated/client-errors.md b/documentation/docs/98-reference/.generated/client-errors.md index 789e012386..4fa8e1fc43 100644 --- a/documentation/docs/98-reference/.generated/client-errors.md +++ b/documentation/docs/98-reference/.generated/client-errors.md @@ -140,6 +140,12 @@ The `flushSync()` function can be used to flush any pending effects synchronousl This restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6. +### fn_unavailable_on_client + +``` +`%name%`(...) is unavailable on the client. +``` + ### fork_discarded ``` diff --git a/documentation/docs/98-reference/.generated/server-errors.md b/documentation/docs/98-reference/.generated/server-errors.md index 43f785fe33..101dc5db9e 100644 --- a/documentation/docs/98-reference/.generated/server-errors.md +++ b/documentation/docs/98-reference/.generated/server-errors.md @@ -8,6 +8,12 @@ Encountered asynchronous work while rendering synchronously. You (or the framework you're using) called [`render(...)`](svelte-server#render) with a component containing an `await` expression. Either `await` the result of `render` or wrap the `await` (or the component containing it) in a [``](svelte-boundary) with a `pending` snippet. +### fn_unavailable_on_server + +``` +`%name%`(...) is unavailable on the server. +``` + ### html_deprecated ``` @@ -37,6 +43,13 @@ This error occurs when using `hydratable` or `setHydratableValue` multiple times ``` +### lifecycle_function_unavailable + +``` +`%name%(...)` is not available on the server +Certain methods such as `mount` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render. +``` + ### render_context_unavailable ``` diff --git a/documentation/docs/98-reference/.generated/shared-errors.md b/documentation/docs/98-reference/.generated/shared-errors.md index ceb622cb30..136b3f4957 100644 --- a/documentation/docs/98-reference/.generated/shared-errors.md +++ b/documentation/docs/98-reference/.generated/shared-errors.md @@ -42,14 +42,6 @@ Here, `List.svelte` is using `{@render children(item)` which means it expects `P A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}` ``` -### lifecycle_function_unavailable - -``` -`%name%(...)` is not available on the %location% -``` - -Certain methods such as `mount` cannot be invoked while running in a server context, while others, such as `hydratable.set`, cannot be invoked while running in the browser. - ### lifecycle_outside_component ``` diff --git a/packages/svelte/messages/client-errors/errors.md b/packages/svelte/messages/client-errors/errors.md index 20442bd2bc..ebaf520153 100644 --- a/packages/svelte/messages/client-errors/errors.md +++ b/packages/svelte/messages/client-errors/errors.md @@ -108,6 +108,10 @@ The `flushSync()` function can be used to flush any pending effects synchronousl This restriction only applies when using the `experimental.async` option, which will be active by default in Svelte 6. +## fn_unavailable_on_client + +> `%name%`(...) is unavailable on the client. + ## fork_discarded > Cannot commit a fork that was already discarded diff --git a/packages/svelte/messages/server-errors/errors.md b/packages/svelte/messages/server-errors/errors.md index d8f40a7908..e55a0e1b39 100644 --- a/packages/svelte/messages/server-errors/errors.md +++ b/packages/svelte/messages/server-errors/errors.md @@ -4,6 +4,10 @@ You (or the framework you're using) called [`render(...)`](svelte-server#render) with a component containing an `await` expression. Either `await` the result of `render` or wrap the `await` (or the component containing it) in a [``](svelte-boundary) with a `pending` snippet. +## fn_unavailable_on_server + +> `%name%`(...) is unavailable on the server. + ## html_deprecated > The `html` property of server render results has been deprecated. Use `body` instead. @@ -29,6 +33,11 @@ This error occurs when using `hydratable` or `setHydratableValue` multiple times ``` +## lifecycle_function_unavailable + +> `%name%(...)` is not available on the server +Certain methods such as `mount` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render. + ## render_context_unavailable > Failed to retrieve `render` context. %addendum% diff --git a/packages/svelte/messages/shared-errors/errors.md b/packages/svelte/messages/shared-errors/errors.md index 1265e55383..bf053283e4 100644 --- a/packages/svelte/messages/shared-errors/errors.md +++ b/packages/svelte/messages/shared-errors/errors.md @@ -34,12 +34,6 @@ Here, `List.svelte` is using `{@render children(item)` which means it expects `P > A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}` -## lifecycle_function_unavailable - -> `%name%(...)` is not available on the %location% - -Certain methods such as `mount` cannot be invoked while running in a server context, while others, such as `hydratable.set`, cannot be invoked while running in the browser. - ## lifecycle_outside_component > `%name%(...)` can only be used during component initialisation diff --git a/packages/svelte/src/index-server.js b/packages/svelte/src/index-server.js index a6141851a1..9fb810fd9e 100644 --- a/packages/svelte/src/index-server.js +++ b/packages/svelte/src/index-server.js @@ -22,19 +22,19 @@ export function createEventDispatcher() { } export function mount() { - e.lifecycle_function_unavailable('mount', 'server'); + e.lifecycle_function_unavailable('mount'); } export function hydrate() { - e.lifecycle_function_unavailable('hydrate', 'server'); + e.lifecycle_function_unavailable('hydrate'); } export function unmount() { - e.lifecycle_function_unavailable('unmount', 'server'); + e.lifecycle_function_unavailable('unmount'); } export function fork() { - e.lifecycle_function_unavailable('fork', 'server'); + e.lifecycle_function_unavailable('fork'); } export async function tick() {} diff --git a/packages/svelte/src/internal/client/errors.js b/packages/svelte/src/internal/client/errors.js index 8d0e47a94d..d067ff95a3 100644 --- a/packages/svelte/src/internal/client/errors.js +++ b/packages/svelte/src/internal/client/errors.js @@ -245,6 +245,23 @@ export function flush_sync_in_effect() { } } +/** + * `%name%`(...) is unavailable on the client. + * @param {string} name + * @returns {never} + */ +export function fn_unavailable_on_client(name) { + if (DEV) { + const error = new Error(`fn_unavailable_on_client\n\`${name}\`(...) is unavailable on the client.\nhttps://svelte.dev/e/fn_unavailable_on_client`); + + error.name = 'Svelte error'; + + throw error; + } else { + throw new Error(`https://svelte.dev/e/fn_unavailable_on_client`); + } +} + /** * Cannot commit a fork that was already discarded * @returns {never} diff --git a/packages/svelte/src/internal/client/hydratable.js b/packages/svelte/src/internal/client/hydratable.js index 5ce2efe065..2789f54c30 100644 --- a/packages/svelte/src/internal/client/hydratable.js +++ b/packages/svelte/src/internal/client/hydratable.js @@ -30,7 +30,7 @@ function isomorphic_hydratable(key, fn, options) { isomorphic_hydratable['get'] = get_hydratable_value; isomorphic_hydratable['has'] = has_hydratable_value; -isomorphic_hydratable['set'] = () => e.lifecycle_function_unavailable('hydratable.set', 'browser'); +isomorphic_hydratable['set'] = () => e.fn_unavailable_on_client('hydratable.set'); /** @type {Hydratable} */ const hydratable = isomorphic_hydratable; diff --git a/packages/svelte/src/internal/server/errors.js b/packages/svelte/src/internal/server/errors.js index f3f7ad1f40..043c710efc 100644 --- a/packages/svelte/src/internal/server/errors.js +++ b/packages/svelte/src/internal/server/errors.js @@ -14,6 +14,19 @@ export function await_invalid() { throw error; } +/** + * `%name%`(...) is unavailable on the server. + * @param {string} name + * @returns {never} + */ +export function fn_unavailable_on_server(name) { + const error = new Error(`fn_unavailable_on_server\n\`${name}\`(...) is unavailable on the server.\nhttps://svelte.dev/e/fn_unavailable_on_server`); + + error.name = 'Svelte error'; + + throw error; +} + /** * The `html` property of server render results has been deprecated. Use `body` instead. * @returns {never} @@ -46,6 +59,21 @@ ${stack}\nhttps://svelte.dev/e/hydratable_clobbering`); throw error; } +/** + * `%name%(...)` is not available on the server + * Certain methods such as `mount` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render. + * @param {string} name + * @returns {never} + */ +export function lifecycle_function_unavailable(name) { + const error = new Error(`lifecycle_function_unavailable\n\`${name}(...)\` is not available on the server +Certain methods such as \`mount\` cannot be invoked while running in a server context. Avoid calling them eagerly, i.e. not during render.\nhttps://svelte.dev/e/lifecycle_function_unavailable`); + + error.name = 'Svelte error'; + + throw error; +} + /** * Failed to retrieve `render` context. %addendum% * @param {string} addendum diff --git a/packages/svelte/src/internal/server/hydratable.js b/packages/svelte/src/internal/server/hydratable.js index 9b8d20facc..7a66737432 100644 --- a/packages/svelte/src/internal/server/hydratable.js +++ b/packages/svelte/src/internal/server/hydratable.js @@ -29,7 +29,7 @@ function isomorphic_hydratable(key, fn, options) { return entry.value; } -isomorphic_hydratable['get'] = () => e.lifecycle_function_unavailable('hydratable.get', 'server'); +isomorphic_hydratable['get'] = () => e.fn_unavailable_on_server('hydratable.get'); isomorphic_hydratable['has'] = has_hydratable_value; isomorphic_hydratable['set'] = set_hydratable_value; diff --git a/packages/svelte/src/internal/shared/errors.js b/packages/svelte/src/internal/shared/errors.js index beed8b56ad..b13a65b598 100644 --- a/packages/svelte/src/internal/shared/errors.js +++ b/packages/svelte/src/internal/shared/errors.js @@ -51,24 +51,6 @@ export function invalid_snippet_arguments() { } } -/** - * `%name%(...)` is not available on the %location% - * @param {string} name - * @param {string} location - * @returns {never} - */ -export function lifecycle_function_unavailable(name, location) { - if (DEV) { - const error = new Error(`lifecycle_function_unavailable\n\`${name}(...)\` is not available on the ${location}\nhttps://svelte.dev/e/lifecycle_function_unavailable`); - - error.name = 'Svelte error'; - - throw error; - } else { - throw new Error(`https://svelte.dev/e/lifecycle_function_unavailable`); - } -} - /** * `%name%(...)` can only be used during component initialisation * @param {string} name