(
jsxElement: JSXElement,
output: JSXOutputState,
transformContext: ts.TransformationContext,
nodeTypeStr: string,
attributeStatements: JSXAttributeStatements,
)
| 789 | } |
| 790 | |
| 791 | private outputJSXElement( |
| 792 | jsxElement: JSXElement, |
| 793 | output: JSXOutputState, |
| 794 | transformContext: ts.TransformationContext, |
| 795 | nodeTypeStr: string, |
| 796 | attributeStatements: JSXAttributeStatements, |
| 797 | ): JSXNodeOutput { |
| 798 | let makeNodePrototypeParams: ts.Expression[] = [createStringLiteral(nodeTypeStr, transformContext)]; |
| 799 | |
| 800 | if (attributeStatements.staticAttributesLiteral) { |
| 801 | makeNodePrototypeParams.push(attributeStatements.staticAttributesLiteral); |
| 802 | } |
| 803 | |
| 804 | const nodeIdentifier = this.appendInitializedVariable( |
| 805 | '__node', |
| 806 | nodeTypeStr, |
| 807 | this.createRendererCallExpr('makeNodePrototype', makeNodePrototypeParams, transformContext), |
| 808 | output, |
| 809 | transformContext, |
| 810 | ); |
| 811 | |
| 812 | const keyOrUndefined = attributeStatements.key || transformContext.factory.createIdentifier('undefined'); |
| 813 | |
| 814 | if (attributeStatements.lazy) { |
| 815 | const beginIfNeeded = this.createRendererCallExpr( |
| 816 | 'beginRenderIfNeeded', |
| 817 | [nodeIdentifier, keyOrUndefined], |
| 818 | transformContext, |
| 819 | ); |
| 820 | |
| 821 | const innerStatements = this.outputElementInner(jsxElement, attributeStatements, output, transformContext); |
| 822 | const endRenderStatement = innerStatements[innerStatements.length - 1]; |
| 823 | |
| 824 | const beginRenderStatement = transformContext.factory.createIfStatement( |
| 825 | beginIfNeeded, |
| 826 | transformContext.factory.createBlock(innerStatements), |
| 827 | ); |
| 828 | return { |
| 829 | beginRenderStatement, |
| 830 | endRenderStatement, |
| 831 | statements: [beginRenderStatement], |
| 832 | }; |
| 833 | } else { |
| 834 | const beginRenderStatement = this.createRendererCall( |
| 835 | 'beginRender', |
| 836 | [nodeIdentifier, keyOrUndefined], |
| 837 | undefined, |
| 838 | transformContext, |
| 839 | ); |
| 840 | const statements: ts.Statement[] = []; |
| 841 | statements.push(beginRenderStatement); |
| 842 | statements.push(...this.outputElementInner(jsxElement, attributeStatements, output, transformContext)); |
| 843 | const endRenderStatement = statements[statements.length - 1]; |
| 844 | |
| 845 | return { |
| 846 | beginRenderStatement, |
| 847 | endRenderStatement, |
| 848 | statements, |
no test coverage detected