Files
my-notes-viewer/frontend/src/ssr.ts

39 lines
1.1 KiB
TypeScript

import { render } from "svelte/server"
import { addMessages, init, locale } from "svelte-i18n"
import { DEFAULT_LANGUAGE, extractLanguageFromPath } from "./lib/i18n"
import deLocale from "./lib/i18n/locales/de.json"
import enLocale from "./lib/i18n/locales/en.json"
import App from "./App.svelte"
// SSR: load messages synchronously (Babel transforms import → require)
addMessages("de", deLocale)
addMessages("en", enLocale)
/**
* SSR render wrapper for Svelte 5.
*
* tibi-server calls `app.default.render({ url })`.
* Svelte 5 no longer provides a `.render()` method on components —
* instead `render()` must be imported from `svelte/server`.
*
* This wrapper keeps the hook-side API compatible while delegating
* to the Svelte 5 render function internally.
*/
export default {
render({ url }: { url: string }) {
const lang = extractLanguageFromPath(url) || DEFAULT_LANGUAGE
init({
fallbackLocale: DEFAULT_LANGUAGE,
initialLocale: lang,
})
locale.set(lang)
const { body, head } = render(App, {
props: { url },
})
return { html: body, head }
},
}