import { NodeTransform , isSlotOutlet , processSlotOutlet , createCallExpression , SlotOutletNode , createFunctionExpression } from '@vue/compiler-dom' ; import { SSR_RENDER_SLOT } from '../runtimeHelpers' ; import { SSRTransformContext , processChildrenAsStatement } from '../ssrCodegenTransform' ; export const ssrTransformSlotOutlet = ( node , context ) => { if ( isSlotOutlet ( node ) ) { const { slotName , slotProps } = processSlotOutlet ( node , context ) ; const args = [ `_ctx.$slots` , slotName , slotProps || `{}` , `null` , `_push` , `_parent` ] ; if ( context . scopeId && context . slotted !== false ) { args . push ( `"${ context . scopeId }-s"` ) ; } node . ssrCodegenNode = createCallExpression ( context . helper ( SSR_RENDER_SLOT ) , args ) ; } } ; export function ssrProcessSlotOutlet ( node , context ) { const renderCall = node . ssrCodegenNode ! ; if ( node . children . length ) { const fallbackRenderFn = createFunctionExpression ( [ ] ) ; fallbackRenderFn . body = processChildrenAsStatement ( node . children , context ) ; renderCall . arguments [ 3 ] = fallbackRenderFn ; } if ( context . withSlotScopeId ) { const slotScopeId = renderCall . arguments [ 6 ] ; renderCall . arguments [ 6 ] = slotScopeId ? `${ slotScopeId as string } + _scopeId` : `_scopeId` ; } context . pushStatement ( node . ssrCodegenNode ! ) ; }