diff --git a/.changeset/olive-jars-repeat.md b/.changeset/olive-jars-repeat.md
new file mode 100644
index 0000000000..815b5adf71
--- /dev/null
+++ b/.changeset/olive-jars-repeat.md
@@ -0,0 +1,5 @@
+---
+'svelte': minor
+---
+
+feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server`
diff --git a/packages/svelte/src/internal/server/index.js b/packages/svelte/src/internal/server/index.js
index 12f76f188e..3d8ec5fe5e 100644
--- a/packages/svelte/src/internal/server/index.js
+++ b/packages/svelte/src/internal/server/index.js
@@ -1,5 +1,5 @@
/** @import { ComponentType, SvelteComponent, Component } from 'svelte' */
-/** @import { Csp, RenderOutput } from '#server' */
+/** @import { Csp, RenderOutput } from '../../server/public.js' */
/** @import { Store } from '#shared' */
export { FILENAME, HMR } from '../../constants.js';
import { attr, clsx, to_class, to_style } from '../shared/attributes.js';
diff --git a/packages/svelte/src/internal/server/renderer.js b/packages/svelte/src/internal/server/renderer.js
index ba6a361a90..5fb0bb86d5 100644
--- a/packages/svelte/src/internal/server/renderer.js
+++ b/packages/svelte/src/internal/server/renderer.js
@@ -1,5 +1,6 @@
/** @import { Component } from 'svelte' */
-/** @import { Csp, HydratableContext, RenderOutput, SSRContext, SyncRenderOutput, Sha256Source } from './types.js' */
+/** @import { HydratableContext, SSRContext } from './types.js' */
+/** @import { Csp, RenderOutput, SyncRenderOutput, Sha256Source } from '../../server/public.js' */
/** @import { MaybePromise } from '#shared' */
import { async_mode_flag } from '../flags/index.js';
import { abort } from './abort-signal.js';
diff --git a/packages/svelte/src/internal/server/types.d.ts b/packages/svelte/src/internal/server/types.d.ts
index ea6282c176..899255d366 100644
--- a/packages/svelte/src/internal/server/types.d.ts
+++ b/packages/svelte/src/internal/server/types.d.ts
@@ -15,8 +15,6 @@ export interface SSRContext {
element?: Element;
}
-export type Csp = { nonce?: string; hash?: boolean };
-
export interface HydratableLookupEntry {
value: unknown;
serialized: string;
@@ -34,19 +32,3 @@ export interface HydratableContext {
export interface RenderContext {
hydratable: HydratableContext;
}
-
-export type Sha256Source = `sha256-${string}`;
-
-export interface SyncRenderOutput {
- /** HTML that goes into the `
` */
- head: string;
- /** @deprecated use `body` instead */
- html: string;
- /** HTML that goes somewhere into the `` */
- body: string;
- hashes: {
- script: Sha256Source[];
- };
-}
-
-export type RenderOutput = SyncRenderOutput & PromiseLike;
diff --git a/packages/svelte/src/legacy/legacy-server.js b/packages/svelte/src/legacy/legacy-server.js
index 2c43aab6ac..913f2dccb2 100644
--- a/packages/svelte/src/legacy/legacy-server.js
+++ b/packages/svelte/src/legacy/legacy-server.js
@@ -1,5 +1,5 @@
/** @import { SvelteComponent } from '../index.js' */
-/** @import { Csp } from '#server' */
+/** @import { Csp } from '../server/public.js' */
import { asClassComponent as as_class_component, createClassComponent } from './legacy-client.js';
import { render } from '../internal/server/index.js';
import { async_mode_flag } from '../internal/flags/index.js';
diff --git a/packages/svelte/src/server/index.d.ts b/packages/svelte/src/server/index.d.ts
index db75afb9ed..7297c57490 100644
--- a/packages/svelte/src/server/index.d.ts
+++ b/packages/svelte/src/server/index.d.ts
@@ -1,6 +1,8 @@
-import type { Csp, RenderOutput } from '#server';
+import type { Csp, RenderOutput } from './public.js';
import type { ComponentProps, Component, SvelteComponent, ComponentType } from 'svelte';
+export type { Csp, RenderOutput, SyncRenderOutput, Sha256Source } from './public.js';
+
/**
* Only available on the server and when compiling with the `server` option.
* Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app.
diff --git a/packages/svelte/src/server/public.d.ts b/packages/svelte/src/server/public.d.ts
new file mode 100644
index 0000000000..8ef98aef9c
--- /dev/null
+++ b/packages/svelte/src/server/public.d.ts
@@ -0,0 +1,17 @@
+export type Csp = { nonce?: string; hash?: boolean };
+
+export type Sha256Source = `sha256-${string}`;
+
+export interface SyncRenderOutput {
+ /** HTML that goes into the `` */
+ head: string;
+ /** @deprecated use `body` instead */
+ html: string;
+ /** HTML that goes somewhere into the `` */
+ body: string;
+ hashes: {
+ script: Sha256Source[];
+ };
+}
+
+export type RenderOutput = SyncRenderOutput & PromiseLike;
diff --git a/packages/svelte/tests/server-side-rendering/test.ts b/packages/svelte/tests/server-side-rendering/test.ts
index 2dcaa85708..16f7c422b8 100644
--- a/packages/svelte/tests/server-side-rendering/test.ts
+++ b/packages/svelte/tests/server-side-rendering/test.ts
@@ -6,13 +6,12 @@
import * as fs from 'node:fs';
import { assert } from 'vitest';
-import { render } from 'svelte/server';
+import { render, type SyncRenderOutput } from 'svelte/server';
import { compile_directory, should_update_expected, try_read_file } from '../helpers.js';
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')[];
diff --git a/packages/svelte/types/index.d.ts b/packages/svelte/types/index.d.ts
index b752ef5e07..5fcae1b2e0 100644
--- a/packages/svelte/types/index.d.ts
+++ b/packages/svelte/types/index.d.ts
@@ -2616,11 +2616,11 @@ declare module 'svelte/server' {
}
]
): RenderOutput;
- type Csp = { nonce?: string; hash?: boolean };
+ export type Csp = { nonce?: string; hash?: boolean };
- type Sha256Source = `sha256-${string}`;
+ export type Sha256Source = `sha256-${string}`;
- interface SyncRenderOutput {
+ export interface SyncRenderOutput {
/** HTML that goes into the `` */
head: string;
/** @deprecated use `body` instead */
@@ -2632,7 +2632,7 @@ declare module 'svelte/server' {
};
}
- type RenderOutput = SyncRenderOutput & PromiseLike;
+ export type RenderOutput = SyncRenderOutput & PromiseLike;
export {};
}