@@ -4,29 +4,49 @@ import type { JSX } from "./jsx-runtime"
44import { RendererContext } from "./src/elements"
55import { _render as renderInternal , createComponent } from "./src/reconciler"
66
7+ /**
8+ * @deprecated Use `createRoot(renderer).render(() => element)` instead
9+ */
710export const render = async (
811 node : ( ) => JSX . Element ,
912 renderConfig : CliRendererConfig = { } ,
1013) : Promise < { renderer : CliRenderer } > => {
1114 const renderer = await createCliRenderer ( renderConfig )
12- engine . attach ( renderer )
13-
14- renderInternal (
15- ( ) =>
16- createComponent ( RendererContext . Provider , {
17- get value ( ) {
18- return renderer
19- } ,
20- get children ( ) {
21- return createComponent ( node , { } )
22- } ,
23- } ) ,
24- renderer . root ,
25- )
15+ createRoot ( renderer ) . render ( node )
2616
2717 return { renderer }
2818}
2919
20+ /**
21+ * Creates a root for rendering a Solid tree with the given CLI renderer.
22+ * @param renderer The CLI renderer to use
23+ * @returns A root object with a `render` method
24+ * @example
25+ * ```tsx
26+ * const renderer = await createCliRenderer()
27+ * createRoot(renderer).render(() => <App />)
28+ * ```
29+ */
30+ export const createRoot = ( renderer : CliRenderer ) : { render : ( node : ( ) => JSX . Element ) => void } => {
31+ return {
32+ render : ( node ) => {
33+ engine . attach ( renderer )
34+ renderInternal (
35+ ( ) =>
36+ createComponent ( RendererContext . Provider , {
37+ get value ( ) {
38+ return renderer
39+ } ,
40+ get children ( ) {
41+ return createComponent ( node , { } )
42+ } ,
43+ } ) ,
44+ renderer . root ,
45+ )
46+ } ,
47+ }
48+ }
49+
3050export const testRender = async ( node : ( ) => JSX . Element , renderConfig : TestRendererOptions = { } ) => {
3151 const testSetup = await createTestRenderer ( renderConfig )
3252 engine . attach ( testSetup . renderer )
0 commit comments