import { binaryExpression, BinaryExpression, callExpression, identifier, objectExpression, objectProperty, stringLiteral, } from '@babel/types' import { ComponentNode, CompoundExpressionNode, createCompilerError, createSimpleExpression, DirectiveNode, ElementTypes, ErrorCodes, ExpressionNode, findDir, findProp, isStaticExp, isTemplateNode, locStub, NodeTypes, TemplateChildNode, TemplateNode, } from '@vue/compiler-core' import { isUserComponent } from '@dcloudio/uni-cli-shared' import { WITH_SCOPED_SLOT } from '../runtimeHelpers' import { createBindDirectiveNode, parseExpr } from '../ast' import { genExpr } from '../codegen' import { CodegenScope, CodegenVForScope } from '../options' import { isVForScope, NodeTransform, TransformContext } from '../transform' import { ATTR_VUE_ID, ATTR_VUE_SLOTS, rewriteExpressionWithoutProperty, SCOPED_SLOT_IDENTIFIER, } from './utils' import { createVForArrowFunctionExpression } from './vFor' export const transformSlot: NodeTransform = (node, context) => { if (!isUserComponent(node, context as any)) { return } const { children } = node const slots = new Set() const onComponentSlot = findDir(node, 'slot', true) const implicitDefaultChildren: TemplateChildNode[] = [] for (let i = 0; i < children.length; i++) { const slotElement = children[i] let slotDir: DirectiveNode | undefined if ( !isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, 'slot', true)) ) { // not a