From b0f83bf9e112ba63e7d68e26452c2507d09de2cc Mon Sep 17 00:00:00 2001 From: Stefan Buhrmester Date: Fri, 25 Nov 2022 20:47:24 +0100 Subject: [PATCH 1/2] add Svelte SSR support --- packages/svelte/package.json | 4 +++ packages/svelte/src/App.svelte | 15 --------- packages/svelte/src/SSR.svelte | 8 +++++ packages/svelte/src/createInertiaApp.js | 41 ++++++++++++++++++------- packages/svelte/src/server.js | 1 + 5 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 packages/svelte/src/SSR.svelte create mode 100644 packages/svelte/src/server.js diff --git a/packages/svelte/package.json b/packages/svelte/package.json index fe86d9b31..0c6c6909d 100755 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -19,6 +19,10 @@ "keywords": [ "svelte" ], + "exports": { + ".": "./src/index.js", + "./server": "./src/server.js" + }, "main": "src/index.js", "peerDependencies": { "svelte": "^3.20.0" diff --git a/packages/svelte/src/App.svelte b/packages/svelte/src/App.svelte index 7745119cf..ca20fb9e1 100755 --- a/packages/svelte/src/App.svelte +++ b/packages/svelte/src/App.svelte @@ -1,22 +1,7 @@ + +
+ +
\ No newline at end of file diff --git a/packages/svelte/src/createInertiaApp.js b/packages/svelte/src/createInertiaApp.js index 27918305e..e6ce06c36 100644 --- a/packages/svelte/src/createInertiaApp.js +++ b/packages/svelte/src/createInertiaApp.js @@ -1,15 +1,29 @@ -import { setupProgress } from '@inertiajs/core' +import { setupProgress, router } from '@inertiajs/core' import App from './App.svelte' +import SSR from './SSR.svelte' +import store from './store' -export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page, render }) { +export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page, visitOptions }) { const isServer = typeof window === 'undefined' const el = isServer ? null : document.getElementById(id) const initialPage = page || JSON.parse(el.dataset.page) const resolveComponent = (name) => Promise.resolve(resolve(name)) + const initialComponent = await resolveComponent(initialPage.component) + - let head = [] - - const svelteApp = await resolveComponent(initialPage.component).then((initialComponent) => { + if (!isServer) { + router.init({ + initialPage, + resolveComponent, + swapComponent: async ({ component, page, preserveState }) => { + store.update((current) => ({ + component, + page, + key: preserveState ? current.key : Date.now() + })) + } + }) + if (progress) setupProgress(progress) return setup({ el, App, @@ -17,16 +31,21 @@ export default async function createInertiaApp({ id = 'app', resolve, setup, pro initialPage, initialComponent, resolveComponent, - onHeadUpdate: isServer ? (elements) => (head = elements) : null, + visitOptions }, }) - }) - - if (!isServer && progress) { - setupProgress(progress) } if (isServer) { - // TODO + store.set({ + component: initialComponent, + page: initialPage, + key: null + }) + const { html, head } = SSR.render({id, initialPage}) + return { + body: html, + head: [head] + } } } diff --git a/packages/svelte/src/server.js b/packages/svelte/src/server.js new file mode 100644 index 000000000..a3168b6e2 --- /dev/null +++ b/packages/svelte/src/server.js @@ -0,0 +1 @@ +export { default as default } from '@inertiajs/core/server' From 7e26c2400e072db28ea3c086e55a2492e26cc549 Mon Sep 17 00:00:00 2001 From: Jonathan Reinink Date: Sat, 26 Nov 2022 14:45:38 -0500 Subject: [PATCH 2/2] Formatting --- packages/svelte/src/SSR.svelte | 2 +- packages/svelte/src/createInertiaApp.js | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/SSR.svelte b/packages/svelte/src/SSR.svelte index 27fbbe983..37825e3ab 100644 --- a/packages/svelte/src/SSR.svelte +++ b/packages/svelte/src/SSR.svelte @@ -5,4 +5,4 @@
-
\ No newline at end of file + diff --git a/packages/svelte/src/createInertiaApp.js b/packages/svelte/src/createInertiaApp.js index e6ce06c36..137e76f02 100644 --- a/packages/svelte/src/createInertiaApp.js +++ b/packages/svelte/src/createInertiaApp.js @@ -1,4 +1,4 @@ -import { setupProgress, router } from '@inertiajs/core' +import { router, setupProgress } from '@inertiajs/core' import App from './App.svelte' import SSR from './SSR.svelte' import store from './store' @@ -9,7 +9,6 @@ export default async function createInertiaApp({ id = 'app', resolve, setup, pro const initialPage = page || JSON.parse(el.dataset.page) const resolveComponent = (name) => Promise.resolve(resolve(name)) const initialComponent = await resolveComponent(initialPage.component) - if (!isServer) { router.init({ @@ -19,11 +18,15 @@ export default async function createInertiaApp({ id = 'app', resolve, setup, pro store.update((current) => ({ component, page, - key: preserveState ? current.key : Date.now() + key: preserveState ? current.key : Date.now(), })) - } + }, }) - if (progress) setupProgress(progress) + + if (progress) { + setupProgress(progress) + } + return setup({ el, App, @@ -31,7 +34,7 @@ export default async function createInertiaApp({ id = 'app', resolve, setup, pro initialPage, initialComponent, resolveComponent, - visitOptions + visitOptions, }, }) } @@ -40,12 +43,14 @@ export default async function createInertiaApp({ id = 'app', resolve, setup, pro store.set({ component: initialComponent, page: initialPage, - key: null + key: null, }) - const { html, head } = SSR.render({id, initialPage}) + + const { html, head } = SSR.render({ id, initialPage }) + return { body: html, - head: [head] + head: [head], } } }