1
1
import { router , setupProgress , type InertiaAppResponse , type Page } from '@inertiajs/core'
2
2
import type { ComponentType } from 'svelte'
3
- import SvelteApp from './components/App.svelte'
4
- import SSR , { type SSRProps } from './components/SSR.svelte'
3
+ import App from './components/App.svelte'
4
+ import type { SSRProps } from './components/SSR.svelte'
5
+ import SSR from './components/SSR.svelte'
5
6
import store from './store'
6
- import type { ComponentResolver , InertiaComponentType } from './types'
7
+ import type { ComponentsResolver , ResolvedComponents } from './types'
7
8
8
9
type SvelteRenderResult = { html : string ; head : string ; css ?: { code : string } }
9
10
type SSRComponent = ComponentType < SSR > & { render ?: ( props : SSRProps ) => SvelteRenderResult }
10
11
11
12
interface CreateInertiaAppProps {
12
13
id ?: string
13
- resolve : ComponentResolver
14
+ resolve : ComponentsResolver
14
15
setup : ( props : {
15
16
el : Element
16
- // @ts -ignore
17
- App : ComponentType < SvelteApp >
17
+ App : ComponentType < App >
18
18
props : {
19
19
initialPage : Page
20
- resolveComponent : ComponentResolver
20
+ resolveComponent : ComponentsResolver
21
21
}
22
- } ) => void | SvelteApp
22
+ } ) => void | App
23
23
progress ?:
24
24
| false
25
25
| {
@@ -38,16 +38,16 @@ export default async function createInertiaApp({
38
38
setup,
39
39
progress = { } ,
40
40
page,
41
- ssr
41
+ ssr,
42
42
} : CreateInertiaAppProps ) : InertiaAppResponse {
43
43
const isServer = typeof window === 'undefined'
44
44
const el = isServer ? null : document . getElementById ( id )
45
- const initialPage = page || JSON . parse ( el ?. dataset . page ?? '{}' )
45
+ const initialPage : Page = page || JSON . parse ( el ?. dataset ? .page || '{}' )
46
46
const resolveComponent = ( name : string , page : Page ) => Promise . resolve ( resolve ( name , page ) )
47
47
48
48
await resolveComponent ( initialPage . component , initialPage ) . then ( ( initialComponent ) => {
49
49
store . set ( {
50
- component : initialComponent as unknown as InertiaComponentType ,
50
+ component : initialComponent ,
51
51
page : initialPage ,
52
52
} )
53
53
} )
@@ -62,7 +62,7 @@ export default async function createInertiaApp({
62
62
resolveComponent,
63
63
swapComponent : async ( { component, page, preserveState } ) => {
64
64
store . update ( ( current ) => ( {
65
- component : component as InertiaComponentType ,
65
+ component : component as ResolvedComponents ,
66
66
page,
67
67
key : preserveState ? current . key : Date . now ( ) ,
68
68
} ) )
@@ -75,27 +75,25 @@ export default async function createInertiaApp({
75
75
76
76
setup ( {
77
77
el,
78
- App : SvelteApp ,
78
+ App,
79
79
props : {
80
80
initialPage,
81
81
resolveComponent,
82
82
} ,
83
83
} )
84
-
85
- return
86
84
}
87
85
88
86
if ( isServer ) {
89
87
if ( ! ssr ) {
90
88
throw new Error ( `createInertiaApp must provide ssr(...) for server-side rendering.` )
91
89
}
92
-
93
- const { html, head, css } = ssr ( SSR , { id, initialPage } )
94
-
90
+
91
+ const { html, head, css } = ssr ( SSR as SSRComponent , { id, initialPage } )
92
+
95
93
return {
96
94
body : html ,
97
95
head : [
98
- head ,
96
+ head ,
99
97
// Note: Svelte 5 no longer output CSS
100
98
...( css ?. code ? [ `<style data-vite-css>${ css ?. code } </style>` ] : [ ] ) ,
101
99
] ,
0 commit comments