diff --git a/.changeset/better-groups-swim.md b/.changeset/better-groups-swim.md new file mode 100644 index 0000000000..0287bb142f --- /dev/null +++ b/.changeset/better-groups-swim.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: throw for unset `createContext` get on the server diff --git a/packages/svelte/src/internal/server/context.js b/packages/svelte/src/internal/server/context.js index 7779da4c1d..6a7dc1f883 100644 --- a/packages/svelte/src/internal/server/context.js +++ b/packages/svelte/src/internal/server/context.js @@ -17,7 +17,17 @@ export function set_ssr_context(v) { */ export function createContext() { const key = {}; - return [() => getContext(key), (context) => setContext(key, context)]; + + return [ + () => { + if (!hasContext(key)) { + e.missing_context(); + } + + return getContext(key); + }, + (context) => setContext(key, context) + ]; } /** diff --git a/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/_config.js b/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/_config.js new file mode 100644 index 0000000000..575844faf6 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + error: 'missing_context' +}); diff --git a/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/main.svelte b/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/main.svelte new file mode 100644 index 0000000000..c52ad927c7 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/context-not-set-throws/main.svelte @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/test.ts b/packages/svelte/tests/server-side-rendering/test.ts index 2bfc84c7a1..ca98fdd9aa 100644 --- a/packages/svelte/tests/server-side-rendering/test.ts +++ b/packages/svelte/tests/server-side-rendering/test.ts @@ -12,6 +12,7 @@ import { assert_html_equal_with_options } from '../html_equal.js'; import { suite_with_variants, type BaseTest } from '../suite.js'; import type { CompileOptions } from '#compiler'; import { seen } from '../../src/internal/server/dev.js'; +import type { SyncRenderOutput } from '#server'; interface SSRTest extends BaseTest { mode?: ('sync' | 'async')[]; @@ -76,6 +77,9 @@ const { test, run } = suite_with_variants