@@ -9,16 +9,16 @@ export interface ModuleDependencies {
9
9
}
10
10
11
11
export interface SSRContext {
12
- renderResourceHints ?: Function
13
- renderScripts ?: Function
14
- renderStyles ?: Function
12
+ renderResourceHints ?: ( ... args : unknown [ ] ) => unknown
13
+ renderScripts ?: ( ... args : unknown [ ] ) => unknown
14
+ renderStyles ?: ( ... args : unknown [ ] ) => unknown
15
15
// @vitejs /plugin-vue: https://vitejs.dev/guide/ssr.html#generating-preload-directives
16
16
modules ?: Set < string >
17
17
// vue-loader (webpack)
18
18
_registeredComponents ?: Set < string >
19
19
// Cache
20
20
_requestDependencies ?: ModuleDependencies
21
- [ key : string ] : any
21
+ [ key : string ] : unknown
22
22
}
23
23
24
24
export interface RenderOptions {
@@ -237,17 +237,22 @@ export function renderScripts (ssrContext: SSRContext, rendererContext: Renderer
237
237
} ) ) . join ( '' )
238
238
}
239
239
240
- export type RenderFunction = ( ssrContext : SSRContext , rendererContext : RendererContext ) => any
240
+ export type RenderFunction = ( ssrContext : SSRContext , rendererContext : RendererContext ) => unknown
241
241
242
- export function createRenderer ( createApp : any , renderOptions : RenderOptions & { renderToString : Function } ) {
242
+ type CreateApp < App > = ( ssrContext : SSRContext ) => App | Promise < App >
243
+ type ImportOf < T > = T | { default : T } | Promise < T > | Promise < { default : T } >
244
+
245
+ type RenderToString < App > = ( app : App , ssrContext : SSRContext ) => string | Promise < string >
246
+
247
+ export function createRenderer < App > ( createApp : ImportOf < CreateApp < App > > , renderOptions : RenderOptions & { renderToString : RenderToString < App > } ) {
243
248
const rendererContext = createRendererContext ( renderOptions )
244
249
245
250
return {
246
251
rendererContext,
247
252
async renderToString ( ssrContext : SSRContext ) {
248
253
ssrContext . _registeredComponents = ssrContext . _registeredComponents || new Set ( )
249
254
250
- const _createApp = await Promise . resolve ( createApp ) . then ( r => r . default || r )
255
+ const _createApp = await Promise . resolve ( createApp ) . then ( r => 'default' in r ? r . default : r )
251
256
const app = await _createApp ( ssrContext )
252
257
const html = await renderOptions . renderToString ( app , ssrContext )
253
258
0 commit comments