Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 30x 30x 30x 30x 17x 17x 17x 17x 17x 7x 7x 7x 2x 5x 17x 12x 24x 24x 24x | import { createStructuralDirectiveTransform, processIf, IfNode, createIfStatement, createBlockStatement, createCallExpression, IfBranchNode, BlockStatement, NodeTypes } from '@vue/compiler-dom' import { SSRTransformContext, processChildrenAsStatement } from '../ssrCodegenTransform' // Plugin for the first transform pass, which simply constructs the AST node export const ssrTransformIf = createStructuralDirectiveTransform( /^(if|else|else-if)$/, processIf ) // This is called during the 2nd transform pass to construct the SSR-specific // codegen nodes. export function ssrProcessIf( node: IfNode, context: SSRTransformContext, disableNestedFragments = false ) { const [rootBranch] = node.branches const ifStatement = createIfStatement( rootBranch.condition!, processIfBranch(rootBranch, context, disableNestedFragments) ) context.pushStatement(ifStatement) let currentIf = ifStatement for (let i = 1; i < node.branches.length; i++) { const branch = node.branches[i] const branchBlockStatement = processIfBranch( branch, context, disableNestedFragments ) if (branch.condition) { // else-if currentIf = currentIf.alternate = createIfStatement( branch.condition, branchBlockStatement ) } else { // else currentIf.alternate = branchBlockStatement } } if (!currentIf.alternate) { currentIf.alternate = createBlockStatement([ createCallExpression(`_push`, ['`<!---->`']) ]) } } function processIfBranch( branch: IfBranchNode, context: SSRTransformContext, disableNestedFragments = false ): BlockStatement { const { children } = branch const needFragmentWrapper = !disableNestedFragments && (children.length !== 1 || children[0].type !== NodeTypes.ELEMENT) && // optimize away nested fragments when the only child is a ForNode !(children.length === 1 && children[0].type === NodeTypes.FOR) return processChildrenAsStatement(children, context, needFragmentWrapper) } |